10

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

有没有一种简单的方法可以使用共享指针来做到这一点?

有点像我正在寻找的 - 伪代码

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));
4

3 回答 3

10

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

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

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

输出:

43
于 2013-07-14T17:21:36.863 回答
1

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

您是否只是想model2成为一个参考model1以便在您重置时model1,model2 随之而来?

否则,您能否进一步详细说明您要解决的实际问题?

于 2013-07-14T18:24:36.967 回答
0
shared_ptr<char> p(new  char[256],std::default_delete<char[]>());
p.get()[0]='a';

memcpy 大致完成这项工作。您可以尝试使用 reset方法,但只会影响调用者对象。

于 2018-04-26T08:40:01.597 回答