C++ 使用动态内存复制类

C++ 使用动态内存复制类,c++,copy-constructor,dynamic-memory-allocation,C++,Copy Constructor,Dynamic Memory Allocation,可能重复: 我看到两种复制类的方法: 复制构造函数 接线员= 我的问题是,哪一个应该创建动态分配内存的新副本(两个具有相同数据的类和两个动态内存实例),哪一个应该简单地将该类移动到新的内存位置(一个具有相同动态分配内存的类,但该类位于不同的位置)?您必须同时实现这两种方法,因为您可以通过复制构造函数声明变量。您可以分配给变量。例如: Class a; //some heap allocations inside Class b(a); //must be valid Class c = a;

可能重复:

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

  • 复制构造函数

  • 接线员=


  • 我的问题是,哪一个应该创建动态分配内存的新副本(两个具有相同数据的类和两个动态内存实例),哪一个应该简单地将该类移动到新的内存位置(一个具有相同动态分配内存的类,但该类位于不同的位置)?

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

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

    别忘了析构函数。简单的方法是实现复制和分配运算符,即在分配时使用复制,然后使用交换(复制和交换)。而且,您必须实现这两者,因为您可以通过复制构造函数声明变量。您可以分配给变量。例如:

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

    别忘了析构函数。简单的方法是实现复制和分配运算符,即在分配时使用复制,然后使用交换(复制和交换)。和

    复制构造函数创建新对象并基于现有对象初始化其状态:

    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
    
    赋值操作符获取现有对象并更改其状态以匹配另一个现有对象:

    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
    

    您对状态所做的任何决定都应同样适用于两者。

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

    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
    
    赋值操作符获取现有对象并更改其状态以匹配另一个现有对象:

    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
    

    您对状态所做的任何决定都应同样适用于两者。

    两者都必须提供此功能有两种不同的操作,我需要区分哪一种是desired@user1204406区分复制和移动的唯一合理方法是使用复制和移动构造函数以及复制和移动赋值运算符,使用C++11中的右值引用。复制类的唯一方法是在编辑器中使用“复制/粘贴”。也许你的意思是“复制一个对象”?感谢R.Martinho Fernandes回答了八个回答中的问题。两个回答都必须提供此功能。有两个不同的操作,我需要区分哪一个是desired@user1204406区分复制和移动的唯一合理方法是使用复制和移动构造函数以及复制和移动赋值运算符,使用C++11中的右值引用。复制类的唯一方法是在编辑器中使用“复制/粘贴”。也许你的意思是“复制一个物体”?感谢R.Martinho Fernandes在八个回答中回答了这个问题