指向对象的多个指针
Multiple pointers to an object
如果我有一个对象是由几个类中的几个指针指向的,并且我决定在某个时候"改变"这个对象,是否有一种聪明的方法使所有指向该对象的指针都指向新对象?例如
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);
相关文章:
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它