1

可能重复:
深拷贝与浅拷贝
重载 operator= 和重载复制构造函数有什么区别?

我看到了两种复制课程的方法:

  1. 复制构造函数

  2. 运算符=

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

4

2 回答 2

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

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

于 2012-10-24T13:34:05.807 回答
0

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

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

并且不要忘记析构函数。简单的方法是实现复制和分配运算符是在分配时使用复制然后交换(复制和交换)。复制和交换三规则

于 2012-10-24T13:18:24.970 回答