c++ - 当动态分配内存时,为什么我们需要复制构造函数?

标签 c++ dynamic copy-constructor

<分区>

Possible Duplicate:
What is The Rule of Three?

Array(const Array &arraytoCopy)
:size(arraytoCopy.size)
{
    ptr=new int[size];
    for(i=0;i<size;i++)
        ptr[i]=arraytoCopy.ptr[i];
}

如果我不提供复制构造函数会发生什么。

最佳答案

将发生的情况是,当您复制对象时,您将有多个实例指向同一个动态分配的数组。目前尚不清楚哪个实例应该负责在销毁时取消分配它。

如果该类应该拥有该数组,那么它将负责取消分配其资源。在这种情况下,它应该有一个复制构造函数和赋值运算符来复制数组的内容,还有一个对其调用 delete[] 的析构函数。这被称为 rule of three .在 C++11 中,它也应该有移动复制和移动赋值运算符。

如果该类不拥有该数组,它可能一开始就不应该构造它。例如,它可以通过其构造函数接收指向外部分配数组的指针。

关于c++ - 当动态分配内存时,为什么我们需要复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13303319/

相关文章:

c++ - 检查反向迭代器是否与正向迭代器交叉

c++ - WNetGetUniversalName 的问题

javascript - 动态分配事件监听器

c++ - 为什么编译器在调用 move 后选择复制 ctor

c++ - 复制构造函数和赋值运算符

c++ - 转换构造函数

c++ - 未在 C++ Release模式下编写内存转储

c++ - dumb data object 包含所有公共(public)值 c++,这是正确的吗

jsf - 动态JSF(2.0)commandButtons-使用参数设置操作

c - 二维数组动态分配中的段错误