我想知道这两个vector的声明在性能和内存消耗方面有什么不同。
class MyType;
std::vector<MyType> vectorA;
std::vector<std::unique_ptr<MyType>> vectorB;
我有两难,因为我必须在向量中创建一些观察者,如果我在初始化时这样做,我必须使用unique_ptrs,因为向量的变量大小。我不想使用shared_ptrs,因为它们有很大的内存开销。
我正在寻找性能和内存消耗之间的最佳平衡。
我需要知道是否最好首先初始化vectorA(在初始化之后它是严格不可变的),然后在该向量中创建观察者(它不会改变其内容,所以我可以这样做)。在这种情况下,我会失去一些表现。
或者如果创建vectorB而不是vectorA更好。然后我可以在初始化时创建观察者,因为unique_ptr指向的位置不会被更改。我想在这种情况下,每件物品至少会丢失4B / 8B。
最佳实践说什么?我是C ++的初学者,我第一次解决了这个问题。
答案 0 :(得分:1)
如果可能的话,我会选择std::vector<MyType>
。
该方法的优点是:
但是,使用std::vector<std::unique_ptr<MyType>>
可以解决一些负面因素: