[英]A mutable container of immutable objects in C++
我想擁有一個等效於C ++ std :: vector的東西,其中基礎對象是不可變的。 因此,我可以將push_back()項添加到向量中,等等。實際的std :: vector會在下面維護一個數組,該數組大於向量的大小,並填充有默認構造的對象,當您push_back()時,它確實對數組中元素的分配。 我的不可變對象沒有默認的構造函數,而賦值是一個可變操作,所以也沒有。
我可以做一個vector<boost::optional<T>>
,但這是一個混亂的接口,因為我只想將有效構造的對象放入向量中,而只從向量中取出這些對象。
我以為boost會有這樣的東西,但是我找不到。 是否存在這樣的東西?
您對vector
如何工作的構想是不正確的。
向量使用分配器分配原始內存。 這原始內存不包含默認構造的對象-它只是原始內存。
例如,當您執行push_back
,它將使用new
放置將對象構造到原始內存中。 同樣, erase
對象時,它最終將直接調用其析構函數將對象轉換回原始內存。
使用std::vector
的當前(C ++ 11或更高版本)實現,您的對象不需要支持默認構造或賦值。 支持搬遷建設和搬遷分配就足夠了。 為了使用它們,您需要使用emplace_back
而不是push_back
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.