可能重复:
Deep copy vs Shallow Copy
What is the difference between overloading operator= and overloading the copy constructor?
我看到两种复制类的方法:
复制构造函数
运算符=
我的问题是,哪一个应该制作动态分配内存的新副本(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 & swap和Rule of three