我有一个像这样的指针。
MyClass *p; //MyClass is a complex class
我需要创建一个新指针,该指针具有p指向的对象内部的数据副本。复制后,我需要更改我的新对象而不更改* p。
指向的对象当我MyClass *q = p
时,它会复制指针。这样做的正确方法是什么?
我想做类似的事情:
MyClass *q = &p;
当我现在改变q指向的对象的属性时,我不应该影响* p处的对象。
请帮助我。
答案 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)