如果我有一个由多个类中的多个指针指向的对象,并且在某个时候决定“更改”该对象,是否有一种聪明的方法来使指向该对象的所有指针都指向新对象?
例如
class myClass{
//myCLass definition
}
void main(){
shared_ptr<myClass> ptr1, ptr2;
ptr1.reset(new myClass(1));
ptr2 = ptr1;
//Now two pointers pointing at object 1
shared_ptr<myClass> ptr3;
ptr3.reset(new myClass(2)); //new object created
ptr1 = ptr3; //make ptr1 point to object 2
//is there a smart way to make ptr2 also points at object 2?
}
谢谢
最佳答案
正如Brian在评论中指出的那样,最简单的解决方案是使ptr2成为ptr1的引用。这样,一旦您更改了ptr1(或者说是ptr2),它们就可以了。
shared_ptr<myClass> ptr1;
shared_ptr<myClass> &ptr2 = ptr1;
然后,您还可以像这样删除不必要的副本:
ptr2 = ptr1;
您还可以将其编写为
operator=
返回对共享指针的引用,但是我不确定这是否是您需要的智能解决方案:ptr1 = ptr2 = ptr3;
还有一种机制是创建自己的函数来管理所有这些功能,并调用该函数而不是赋值运算符,例如“智能 setter ”。
关于c++ - 指向一个对象的多个指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23460151/