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();
    }
     
     
     
     
  • 相关阅读:
    python json模块(15)
    python random模块(14)
    python time模块(13)
    python sys模块(12)
    python zip函数(11)
    python递归函数(10)
    python 浅拷贝和深拷贝(9)
    python is 和 == 区别(8)
    python 可变数据类型和不可变数据类型(7)
    python局部变量和全局变量(6)
  • 原文地址:https://www.cnblogs.com/fripside/p/2892159.html
Copyright © 2011-2022 走看看