2013-02-25 64 views
-3

這只是令人難以置信的是,標準庫中沒有任何東西允許存儲不可複製對象的對象 - 我至少會遇到複製在所有時間都沒有任何意義的情況(boost信號,opengl對象等)但另一方面,默認構造是合理的操作。出於某種原因,默認的答案似乎是使用指針而不是對象。最後,通過額外的間接引用和引用計數來引入無意義的開銷(因爲unique_ptr也是不可複製的),除此之外,使用起來有些尷尬。是否有任何提供就地構建集合的庫?

這就是說,這樣的替代方案存在嗎?

+2

您能更清楚您的要求嗎?因爲標準庫容器*允許存儲不可複製的對象,所以我不知道你在說什麼。 – 2013-02-25 21:25:59

+2

*並且*它們允許通過'emplace_ *'成員函數 – 2013-02-25 21:32:16

+0

@AndyProwl進行就地構建。但是它們需要copy_constructible用於許多操作(即映射中的[]運算符)。誠然,說他們不能被使用是誇張的,我不得不說你不希望單靠功能要求來使用它們。 – Cubic 2013-02-25 21:48:04

回答

3

從C++ 11開始,大多數(如果不是全部的話)容器不要求它們的元素是可複製的。例如,向量只需要元素是可移動的,而其他容器(deque,* list,* map,集合)沒有可複製/可移動的元素要求。您需要默認構建元素,或者使用emplace方法來創建它們。當然,如果你調用需要複製/移動的操作,你的類型必須支持它,但只是將元素存儲在容器中並不需要它們是可複製的。

+0

這實際上是我的問題。例如。使用沒有[]運算符的地圖是尷尬的。 – Cubic 2013-02-25 21:49:36

+1

@Cubic使用'std :: map :: at',使其不那麼尷尬http://stackoverflow.com/a/13902825/893693 – inf 2013-02-25 21:53:49

相關問題