-1
我有一個指針切片,但我不完全知道在哪裏和爲什麼。 有兩行代碼,我認爲可能會導致拼接:切片發生與unique_ptr?
的唯一指針的創建:
map.insert(make_pair("ChildA", unique_ptr<Base>(new ChildA())));
和原始指針從我的唯一指針返回:
return map["ChildA"].get();
請注意:
- 類ChildA繼承基
- 基座具有虛析構函數
在以上示例中的地圖的類型爲:
map<string, unique_ptr<Base> >
剪接是否發生在任一的代碼上述的行?有沒有簡單的方法來避免它在哪裏?
你的意思是'返回地圖[「ChildA」]。get()'對嗎? – WhozCraig 2014-10-07 07:05:25
'返回地圖[ChildA] .get()'不是有效的代碼 - 永遠[後REAL代碼](http://stackoverflow.com/help/mcve)。 – Angew 2014-10-07 07:05:26
IIRC,切片只發生在值對象的副本上;所以沒有引用,而不是指針(即使在智能指針中)。因此,這取決於包含'return map [ChildA] .get();'的函數簽名中的類型。簽名是什麼以及結果如何使用? – Niall 2014-10-07 07:05:41