#include <iostream> using namespace std; class data { int* value; public: data(int v){value = new int(v);} ~data(){delete value;} void display(){cout<<"指向的内存:"<<&*value<<endl;}; }; void testCopy() { data m(10); data p = m; m.display(); p.display(); }
这段代码的问题是:delete被调用了2次,由于第二次调用的复制构造函数,指针p->value指向m->value的内存,并没有分配新的内存。
解决办法:
1.把复制构造函数定义为private:
class data { int* value; data(const data&); data& operator = (const data&); public: data(int v){value = new int(v);} ~data(){delete value;} };
2.自定义复制构造函数,给指针对象分配内存
class data { int* value; //data(const data&); //data& operator = (const data&); public: data():value(NULL){} data(int v){value = new int(v);} ~data(){delete value;} data(const data& d){ if (NULL != d.get_ptr()) { value = new int(*d.get_ptr()); } }; void display() const {cout<<"指向的内存:"<<&*value<<endl;} int* get_ptr() const { return value;} }; void testCopy() { data m(10); data p = m; m.display(); p.display(); }