#include <iostream>
#include <assert.h>
using namespace std;
class Test
{
public:
Test(){
p = new int(10);
}
~Test(){
assert(p != NULL); // assert()作用是如果他的条件返回错误,则终止程序执行
delete p;
}
private:
int x;
int y;
int* p;
};
int main()
{
Test t1;
Test t2(t1); // 调用默认拷贝构造函数
return 0;
}上述程序崩溃。在使用t1复制t2时,进行的是浅拷贝,只是将成员的值进行赋值。此时,t1.p = t2.p, 即两个指针指向了堆里的同一个空间。这样,析构函数会被调用两次,这就是错误出现的原因。此问题的解决方法是“深拷贝”。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。