Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
可能重复: 深拷贝与浅拷贝 重载 operator= 和重载复制构造函数有什么区别?
我看到了两种复制课程的方法:
复制构造函数
运算符=
我的问题是,哪个应该制作动态分配内存的新副本(2 个具有相同数据的类和 2 个动态内存实例),哪个应该简单地将类移动到新的内存位置(一个具有相同动态分配内存的类但是班级在不同的地方)?
复制构造函数创建一个新对象并根据现有对象初始化其状态:
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
无论你对国家做出什么决定,都应该同样适用于两者。
您必须同时实现这两者,因为您可以通过复制构造函数声明变量。您可以分配给变量。例如:
Class a; //some heap allocations inside Class b(a); //must be valid Class c = a; //must be valid too
并且不要忘记析构函数。简单的方法是实现复制和分配运算符是在分配时使用复制然后交换(复制和交换)。复制和交换和三规则