這是而不是關於將std :: auto_ptr放入std :: vector的問題。嚴格所有權語義的C++向量
在std::
,std::tr1::
或boost::
中是否有某個載體相當於std::auto_ptr
?我在函數參數中使用了std::auto_ptr
,並使用返回值來取消這些函數的所有權語義。但是這樣我就只能傳遞單個對象。作爲載體的臨時解決方案,我有這樣的:
std::auto_ptr<std::vector<std::tr1::shared_ptr<ClassExample> > > fx(....);
我想其中,通過引入升壓,我將能夠變成這樣:
std::auto_ptr<std::vectro<boost::unique_ptr<ClassExample> > >f(...);
爲了定義嚴格所有權傳球,但它似乎相當複雜。爲了簡化它,我可以使用
std::vector<boost::unique_ptr<ClassExample> > f(...);
的價格爲載體的深拷貝不高,但我還是好奇,如果有東西,我可以用這樣的:
auto_vector<ClassExample> f(...);
這意味着該函數釋放所有對象的所有權,並且矢量內部數據數組不會被深度複製。
我認爲這是「如果每個人都想要一個」的問題之一。如果'auto_vector',那麼爲什麼不'auto_deque','auto_set','shared_vector','unique_unordered_multiset',基本上是任何智能指針類型與任何類的每個組合。模板語法是羅嗦的,typedefs可以幫助解決這個問題,但通常是用戶的問題。這甚至忽略了你希望'auto_vector'專門包含'unique_ptr'而不是其他任何東西。 –
喬Gauterin:謝謝,固定 –
我認爲你有幾個假設錯誤,特別是大多數編譯器將能夠優化利用價值的迴歸不要求一個新的對象,載體本身的所以動態分配是不必要的併發症,以問題。 –