2013-07-14 73 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