#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();
}