指向对象的多个指针

Multiple pointers to an object

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

如果我有一个对象是由几个类中的几个指针指向的,并且我决定在某个时候"改变"这个对象,是否有一种聪明的方法使所有指向该对象的指针都指向新对象?例如

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"。

您实际上并没有"更改"对象。如果你真的改变了对象的值,就不会有这个问题了。你可以复制:

*ptr1 = *ptr3;

或移动:

*ptr1 = std::move(*ptr3);