拷贝构造函数与赋值构造函数

以上两篇文章讲了拷贝构造函数与赋值构造函数
看以下代码:
#include <iostream>
using namespace std;
class A
{
public:
    A(int _size) : size(_size){ data = new int[size]; } //假如其中有一段动态分配的内存
    int Get_Val() {return *data;}
    int *Get_Val_add() { return data; }
    A() {}
    A( const A& _A) : size(_A.size){ data = new int[size]; } //深拷贝
    ~A(){delete[] data; data = NULL; } //析构时释放资源
private:
    int *data;
    int size;
};
int main()
{
    A a(5);
    A b;
    b = a;
    cout << b.Get_Val() << endl;
    return 0;
}
以上代码虽然自己写了拷贝构造函数,进行了深拷贝,但是在运行的时候还是会出错,会造成crash,原因为 “b = a”造成的,在这里得重载运算符“=”。(赋值构造函数) 因为 执行“b = a”,并没有调用到事先定义的拷贝构造函数, 如果将“b = a”改为 A b(a)或者A b = a之后就可以成功运行了。

代码改正如下
#include <iostream>
using namespace std;
class A
{
public:
    A(int _size) : size(_size){ data = new int[size]; } //假如其中有一段动态分配的内存
    int Get_Val() {return *data;}
    int *Get_Val_add() { return data; }
    A() {}
    A( const A& _A) : size(_A.size){ data = new int[size]; } //深拷贝
    A& operator = ( const A& _A){ size= _A.size; data = new int[size]; return *this; } //深拷贝
    //A& operator = ( const)
    ~A(){delete[] data; data = NULL; } //析构时释放资源
private:
    int *data;
    int size;
};
int main()
{
    A a(5);
    A b;
    b = a;
    cout << b.Get_Val() << endl;
    return 0;
}
重载了运算符“=" 之后可以成功执行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值