替换共享指针的内容?

时间:2013-07-14 17:13:04

标签: c++ boost shared-ptr

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

使用共享指针有一种简单的方法吗?

有点喜欢这样我正在寻找 - 伪代码

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

3 个答案:

答案 0 :(得分:5)

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

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

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

输出:

43

答案 1 :(得分:0)

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

您是否希望model2成为model1参考,以便在重置model1时,模型2会随着更改而出现?

否则你能否详细说明你想要解决的真正问题?

答案 2 :(得分:0)

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