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();
    }
     
     
     
     
  • 相关阅读:
    HDU1251统计难题map+输入
    HDU1863畅通工程
    POJ2253 Frogger
    HDU 4725 (The Shortest Path in Nya Graph)层次网络
    hdu5521(Meeting)spfa 层次网络最短路
    Fire Net ZOJ 1002
    POJ3259(Wormholes) 判断负环
    POJ3268(Silver Cow Party)
    棋盘问题 POJ 1321
    POJ 1661 (Help Jimmy )
  • 原文地址:https://www.cnblogs.com/fripside/p/2892159.html
Copyright © 2011-2022 走看看