使用动态内存复制类

时间:2012-10-24 13:12:46

标签: c++ copy-constructor dynamic-memory-allocation

  

可能重复:
  Deep copy vs Shallow Copy
  What is the difference between overloading operator= and overloading the copy constructor?

我看到两种复制类的方法:

  1. 复制构造函数

  2. 运算符=

  3. 我的问题是,哪一个应该制作动态分配内存的新副本(2个类具有相同的数据和2个动态内存实例),并且应该简单地将类移动到新的内存位置(一个类具有相同的内存)动态分配内存,但类在不同的地方)?

2 个答案:

答案 0 :(得分:1)

复制构造函数创建一个新对象并根据现有对象初始化其状态:

A x(y); // x is now in the same state as y

赋值运算符获取现有对象并更改其状态以匹配另一个现有对象:

A x; // x is in the default state
x = y; // x is now in the same state as y

无论你对国家做出什么决定都应该同样适用于两者。

答案 1 :(得分:0)

您必须实现这两个,因为您可以通过复制构造函数声明变量。您可以分配给变量。例如:

Class a; //some heap allocations inside
Class b(a); //must be valid
Class c = a; //must be valid too

并且不要忘记析构函数。简单的方法是实现复制和赋值操作符是在分配时使用copy然后交换(copy& swap)。 Copy & swapRule of three