将C++对象复制到指向新指针的指针处

Copy a C++ object at a pointer to a new pointer

本文关键字:指针 新指针 对象 C++ 复制      更新时间:2023-10-16

我有一个这样的指针。

MyClass *p;  //MyClass is a complex class

我需要创建一个新指针,其中包含 p 指向的对象内的数据副本。复制后,我需要更改我的新对象而不更改 *p 指向的对象。

当我这样做时MyClass *q = p它会复制指针。正确的方法是什么?

我想做这样的事情:

MyClass *q = &p;

当我现在更改 q 指向的对象的属性时,我不应该影响 *p 处的对象。

请帮我解决这个问题。

如果MyClass有一个复制构造函数,那么你可以简单地从旧的构造函数构造一个新的,如下所示:

MyClass* p = some_function();
MyClass* q = new MyClass(*p); // use copy constructor

当然,你应该为这种事情使用智能指针

std::unique_ptr<MyClass> p = some_function();
std::unique_ptr<MyClass> q = std::make_unique<MyClass>(*p); // copy constructor

如果MyClass多态的,这将不起作用,在这种情况下,需要一个虚拟clone()函数。

首先,第二个指针需要指向某个分配的内存,该内存的类型与第一个对象相同:

Myclass *d = something();  //pointing to some object in memory 
Myclass *q = new Myclass(); //allocating space in memory for the same type

然后,您可以使用复制运算符复制数据,如下所示:

(*q) = (*d)