浅拷贝与深拷贝区别:在执行拷贝动作时,浅拷贝只会执行简单的赋值动作。
遇到类成员变量是指针类型时,由于会直接将指针本身拷贝过去,导致有几个指针指向同一片内存,以致于最后在调用析构函数时会对同一片内存区域释放多次。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
class Vertify
{
public:
Vertify(const char* name)
{
this->size_ = strlen(name);
this->pName_ = new char[size_ + 1];
strcpy(pName_, name);
}
~Vertify()
{
if (NULL != pName_)
{
delete pName_;
pName_ = NULL;
}
size_ = 0;
}
public:
int size_;
char* pName_;
};
int main()
{
{
Vertify v1("hello ,tomorrow!");
Vertify v2 = v1;
}
cin.get();
return 0;
}
解决方案:提供一个拷贝构造函数
Vertify(const Vertify & obj)
{
this->size_ = obj.size_;
this->pName_ = new char[size_ + 1];
strcpy(pName_, obj.pName_);
}