zoukankan      html  css  js  c++  java
  • C++指针拷贝

    #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();
    }
     
     
     
     
  • 相关阅读:
    2011年10月小记
    修改模拟器hosts文件
    2011年9月小记
    解决IIS7.5站点不能登录SQLEXPRESS
    EF 4.3 CodeBased Migrations
    2012年5月 小记
    Android对SD卡进行读写
    Tomcat for Eclipse
    ARR2.5 配置反向代理
    作业2浅谈数组求和java实验
  • 原文地址:https://www.cnblogs.com/fripside/p/2892159.html
Copyright © 2011-2022 走看看