簡體   English   中英

C ++中可變對象的可變容器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM