开发者社区> 问答> 正文

如何自定义拷贝构造函数

如何自定义C++中的拷贝构造函数,什么时候需要自定义拷贝构造函数,为什么?

展开
收起
a123456678 2016-03-05 16:20:48 2109 0
1 条回答
写回答
取消 提交回答
  • /自定义拷贝构造函数
    classname(const classname &ob)
    {
    //自定义拷贝构造函数的函数体
    }
    // 其中ob是用来初始另一个对象的对象的引用

    class StringData{
    private: char *str;
    public:
    StringData(char *s){

    str=new char[strlen(s)+1];
    strcpy(str,s);
    }
    StringData(const StringData &p){
    str=new char[strlen(p.str)+1];
    strcpy(str,p.str);
    }
    ~StringData() { delete str; }
    //…
    };
    int main()
    {

    StringData x(“abc”);

    StringData y(x);
    }

    拷贝构造函数是一种特殊的构造函数。它用于依据已存在的对象建立一个新对象。
    如果一个对象里面有指针成员,并且这个指针已经动态分配空间了,同时,对象有析构函数对这个指针进行释放。如上面那个例子,如果我们通过这个对象创建一个新对象:
    A a("123");
    A b = a; // 调用拷贝构造函数

    如果我们没有自定义拷贝构造函数,导致对象 a 和 b 的指针成员指向同一个地址空间,当对象生命周期结束时,a 和 b 都会调用析构函数,最后导致,这个指针会被释放 2 次,导致内存出问题。

    所以,对象有指针成员,尽量自定义拷贝构造函数。

    2019-07-17 18:53:42
    赞同 展开评论 打赏
问答分类:
C++
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载