我想要一些等同于C++ std :: vector的东西,其中底层对象是不可变的.所以我可以将push_back()项添加到向量等等.实际的std :: vector维护一个下面的数组,该数组大于向量的大小,填充了默认的构造对象,当你使用push_back()时,它会对数组中元素的赋值.我的不可变对象没有默认构造函数,赋值是一个变异操作,因此也是如此.
我可以做一个vector<boost::optional<T>>,但这是一个混乱的界面,因为我只想将有效构造的对象放入向量中,并且只从向量中获取它们.
我认为加强有类似的东西,但我找不到它.这样的事情存在吗?
您对vector工作原理的理解是不正确的。
向量使用分配器来分配原始内存。该原始内存不包含默认构造的对象——它只是原始内存。
push_back例如,当您执行 a 操作时,它会使用放置new将对象构造到原始内存中。同样,当您访问erase一个对象时,它最终会直接调用其析构函数以将对象返回到原始内存中。
使用 的当前(C++11 或更高版本)实现std::vector,您的对象不需要支持默认构造或赋值。支持移动构建和移动分配应该足够。要使用它们,您需要使用emplace_backwhile 而不是push_back。