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();
    }
     
     
     
     
  • 相关阅读:
    H5分栏(第一章)
    数据库操作集合
    sql 存储过程
    数据库事务
    Sql 分页三种方式
    GridView 后台分页
    GridView 分页 上一页 下一页 跳转 前端分页
    GridView 分页
    web前端开发分享-css,js入门篇(转)
    Intellij IDEA,WebStorm-keymap(转)
  • 原文地址:https://www.cnblogs.com/fripside/p/2892159.html
Copyright © 2011-2022 走看看