C++ 是否替换共享指针的内容?

C++ 是否替换共享指针的内容?,c++,boost,shared-ptr,C++,Boost,Shared Ptr,我有一个在系统中共享的指针。稍后,我想替换这些共享指针指向的实际内容,但仍然保持所有共享指针有效,因此它们在内部指向这个新对象 有没有一种简单的方法可以通过共享指针实现这一点 有点像我要找的-伪代码 typedef boost::shared_ptr<Model> ModelPtr ModelPtr model1 = ModelPtr(new Model); ModelPtr model2 = model1; // make something like 'model1.get(

我有一个在系统中共享的指针。稍后,我想替换这些共享指针指向的实际内容,但仍然保持所有共享指针有效,因此它们在内部指向这个新对象

有没有一种简单的方法可以通过共享指针实现这一点

有点像我要找的-伪代码

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

如果我理解正确,您可以使用重载的取消引用运算符:

auto a = std::make_shared<int>(42);
auto b = a;
*a = 43;

std::cout << *b << std::endl;

每个
shared_ptr
实例都有自己的指针副本,因此任何一个
shared_ptr
实例都无法知道并影响其他引用计数的
shared_ptr
实例的指针

您是否只想将
model2
作为对
model1
的引用,以便在重置
model1
时,model2随更改一起出现

否则,您能否进一步阐述您试图解决的实际问题?

shared\u ptr p(new char[256],std::default\u delete());
shared_ptr<char> p(new  char[256],std::default_delete<char[]>());
p.get()[0]='a';
p、 get()[0]=“a”;
我可以粗略地完成这项工作。
您可以尝试使用
reset
方法,但只影响调用者对象。

也许您可以使用
共享\u ptr
?将
*model1=Model{}执行您需要的操作?此处的“placement new”是否有帮助?model1和model2都指向相同的模型实例和相同的内存位置,对吗?我想更改该内存位置的数据,使其代表另一个模型实例-这不可能吗?@KaiserJohaan“该内存位置的数据”是一个模型实例。您可以更改该数据的值,两个指针都将指向新值
43
shared_ptr<char> p(new  char[256],std::default_delete<char[]>());
p.get()[0]='a';