C++ 0510 向量的拷贝

拷贝

class vector
{
    int sz; //大小
    double* elem; //指向元素的指针
pulic:
    vector(int s) //构造函数
        :sz{s},elem{new double[s]} {/*...*/} //分配内存
    ~vector()                  //析构函数
        {delete[] elem;}   //释放内存
}

void f(int n)
{
    vector v(3); //定义一个包含3个元素的vector
    v.set(2,2.2); //将v[2]设置为2.2
    vector v2 = v; //会发生什么?
}

对于指针成员而言,仅仅对指针成员进行拷贝会产生问题。

v.set(1,99); //set v[1]to 99
v2.set(0.88); //set v2[0] to 88
cout<<v.get(0)<<''<<v2.get(1);
输出结果将会是88 99
我们想要的是00 00

由于v与v2的elem指向同一块内存,因此两次释放这块内存很可能造成灾难
性的后果。


拷贝构造函数

vector(const vector&);
我们试图使用一个vector初始化另一个vector时,这一拷贝构造函数将会被调用。
拷贝构造函数使用对象引用作为参数的原因在于我们(显然)不希望在传递函数参数时又发生参数拷贝
,而使用const引用的原因在于我们不希望函数对参数进行修改。
class vector
{
    int sz; //大小
    double* elem; //指向元素的指针
pulic:
    vector(const vector&) //拷贝构造函数:定义拷贝操作
 
}

vector:: vector(const vector& arg)
//分配元素,然后通过拷贝初始化它们
    :sz{arg.sz},elem{new double[arg.sz]}
{
    copy(arg.elem, arg.elem.sz, elem);
}

vector v2=v;

v.set(1,99); //set v[1]to 99
v2.set(0.88); //set v2[0] to 88
cout<<v.get(0)<<''<<v2.get(1);

输出我们想要的00 00


vector v2=v;
vector v2{v};
上面两个相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值