C++ 如何编写复制构造函数来复制指针?
我有一个简单的课程:C++ 如何编写复制构造函数来复制指针?,c++,oop,memory-management,C++,Oop,Memory Management,我有一个简单的课程: class Device { std::string _serialNumber; DeviceInfo(std::string serialNumber){ _serialNumber = serialNumber; } } 现在我创建了一个指针变量: Device *device1 = new Device(); 我想复制device1的内容,但device2应该指向不同的内存 Device *devic
class Device {
std::string _serialNumber;
DeviceInfo(std::string serialNumber){
_serialNumber = serialNumber;
}
}
现在我创建了一个指针变量:
Device *device1 = new Device();
我想复制device1的内容,但device2应该指向不同的内存
Device *device2 = device1;
这显然不起作用,因为device2仍然指向device1的内存地址
如何使用复制构造函数实现这一点?谢谢。当您有一个成员变量不能被简单地复制时,您需要一个自定义的复制构造函数 例如: 如果类中有int*memVar,因为如果它被简单地复制,那么新对象的memVar将与源对象的memVar包含的地址相同 现在,可以轻松地复制类对象而不会出现问题,因此不需要自定义复制构造函数 最后一行与复制构造函数无关。如果您想让一个ptr指向某个对象(如*device1)的副本,可以按如下操作
Device *devicePtr1 = new Device{};
Device deviceCopy = Device {*devicePtr1};//using the trivial cpy ctor
Device * devicePtr2 = &deviceCopy;//Now define your new pointer
或者你也可以直接简化最后两行,就像cigien说的那样
Device *devicePtr2 = new Device{*devicePtr1};
当无法简单地复制成员var时,需要自定义复制构造函数 例如: 如果类中有int*memVar,因为如果它被简单地复制,那么新对象的memVar将与源对象的memVar包含的地址相同 现在,可以轻松地复制类对象而不会出现问题,因此不需要自定义复制构造函数 最后一行与复制构造函数无关。如果您想让一个ptr指向某个对象(如*device1)的副本,可以按如下操作
Device *devicePtr1 = new Device{};
Device deviceCopy = Device {*devicePtr1};//using the trivial cpy ctor
Device * devicePtr2 = &deviceCopy;//Now define your new pointer
或者你也可以直接简化最后两行,就像cigien说的那样
Device *devicePtr2 = new Device{*devicePtr1};
只有当类本身正在管理内存时,才需要复制构造函数。在这种情况下,只需执行Device*device2=新设备{device1}@cigien,我得到一个错误:“设备”初始化没有匹配的构造函数@cigien我想你在新设备{*device1}@asmmo中漏掉了一个*,是的,我漏掉了。感谢您提供了一个详细的答案:只有在类本身管理内存时才需要复制构造函数。在这种情况下,只需执行Device*device2=新设备{device1}@cigien,我得到一个错误:“设备”初始化没有匹配的构造函数@cigien我想你在新设备{*device1}@asmmo中漏掉了一个*,是的,我漏掉了。感谢您提供详细的答案: