替换共享指针的内容
Replacing the content of the shared pointer?
我有一个在系统中共享的共享指针。稍后,我想替换这些共享指针指向的实际内容,但仍然保持所有共享指针有效,因此它们在内部指向这个新对象。
有没有一种简单的方法可以通过共享指针实现这一点?
有点像这样,我正在寻找-伪代码
typedef boost::shared_ptr<Model> ModelPtr
ModelPtr model1 = ModelPtr(new Model);
ModelPtr model2 = model1;
// make something like 'model1.get() = new Model' so model1, model2 both points to a new model
编辑:我想要这个效果,但不那么笨拙的
ModelPtr model1 = ModelPtr(new Model("monkey"));
memcpy(model1 .get(), new Model("donkey"), sizeof(Model));
如果我理解正确,你可以使用重载的去引用运算符:
auto a = std::make_shared<int>(42);
auto b = a;
*a = 43;
std::cout << *b << std::endl;
输出:
43
每个shared_ptr
实例都有自己的指针副本,因此任何一个shared_ptr
实例都无法知道并影响其他引用计数的shared_ptr
实例的指针。
您是否只希望model2
成为model1
的引用,以便在重置model1
时,模型2也会随之更改?
否则,你能进一步阐述你试图解决的真正问题吗?
shared_ptr<char> p(new char[256],std::default_delete<char[]>());
p.get()[0]='a';
memcpy粗略地做了这项工作。您可以尝试使用reset
方法,但只影响调用方对象。
相关文章:
- 如何从具有移动语义的类对象中生成共享指针
- 使用共享指针的函数调用,其对象应为 const
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 如何访问由共享指针保存的类方法?
- 从矢量或地图中删除共享指针
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 使用共享指针实现复制 c'tor?
- C++/QT:使用指向私有成员的常量指针作为只读数据共享
- 共享指针继承,而不先显式强制转换
- 如何检查类中共享指针的有效性?
- 共享 C++ 的数据成员指针
- std::排序在共享指针的向量上
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 在什么情况下,需要共享智能指针而无法使用唯一指针?
- 嵌套类、继承和C++中的共享指针
- <Base> <Derived> 具有相同原始指针共享引用的 shared_ptr 和 shared_ptr 实例是否计数?
- 重载流<<运算符,用于指针/共享指针和其他类型的
- RAW指针共享_ptr
- 指针共享习语
- 将memmove函数与临时指针共享相同的地址