我想知道这两个向量声明之间在性能和内存消耗上有什么区别。
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 ++的初学者,并且是第一次解决此类问题。
如果可能的话,我会同意的std::vector<MyType>
。
该方法的优点是:
但是,使用std::vector<std::unique_ptr<MyType>>
可以解决一些负面因素:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句