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

时间:2018-02-04 00:40:50

标签: c++

我有一个像这样的指针。

MyClass *p;  //MyClass is a complex class

我需要创建一个新指针,该指针具有p指向的对象内部的数据副本。复制后,我需要更改我的新对象而不更改* p。

指向的对象

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

我想做类似的事情:

MyClass *q = &p;

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

请帮助我。

2 个答案:

答案 0 :(得分:3)

如果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()功能。

答案 1 :(得分:2)

首先,你的第二个指针需要指向一些与你的第一个对象具有相同类型的已分配内存:

Myclass *d = something();  //pointing to some object in memory 

Myclass *q = new Myclass(); //allocating space in memory for the same type

然后您可以使用复制运算符来复制数据:

(*q) = (*d)