2013-07-14 69 views
1

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

有一种简单的方式与共享指针做到这一点?

有点像这个我要找 - 伪代码

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 

编辑: 我想这样的效果,但不太gimicky

ModelPtr model1 = ModelPtr(new Model("monkey")); 
memcpy(model1 .get(), new Model("donkey"), sizeof(Model)); 
+0

也许你可以使用'shared_ptr的>'? – rodrigo

+2

'* model1 = Model {};'做你需要的吗? – aschepler

回答

1

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

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

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

输出:

43 
0

每个shared_ptr实例都有自己的指针的副本,所以没有办法对任何一个shared_ptr实例来了解并影响其他引用计数shared_ptr实例的指针。

你,而不是只想model2成为参考model1所以,当你重新model1,MODEL2与变化走来?

否则你能在你试图解决真正的问题进一步阐述?

+0

model1和model2都指向相同的Model实例和相同的内存位置吗?我想改变那个内存位置的数据,所以它代表了另一个Model实例 - 这是不可能的? – KaiserJohaan