什么是更好的 -
std::vector<MyClass*>
Run Code Online (Sandbox Code Playgroud)
或者
std::vector<MyClass>
Run Code Online (Sandbox Code Playgroud)
?我的意思是,第二个选项是否会将对象存储在堆中?哪一个更快更干净?
std::vector<MyClass>在大多数情况下应该是更可取的。是的,它默认将对象存储在堆(动态存储)中std::allocator。
优点是对象在向量销毁时自动销毁,并分配在单个连续内存块中,从而减少堆碎片。所以这样就更干净了。
而且这种方式更快,因为它可以最大限度地减少内存分配操作。Vector会在构造对象之前预先分配存储空间,因此对于N个对象,将进行M次分配操作和N次构造函数调用,N > M(N越大 - 差异越大)。如果手动创建对象并通过指针将它们放置到向量中,则会导致 M 次分配和 N 次构造,M = N + X,其中 X 是向量存储分配。如果您知道存储对象的数量,则始终可以最小化向量内存分配 - 使用std::vector::reserve().
相反,使用std::vector指针将需要您手动销毁对象,例如调用delete动态分配的对象。不建议这样做。此类容器只能作为非拥有者使用。在这种情况下,对象所有权应在外部维护。
| 归档时间: |
|
| 查看次数: |
2044 次 |
| 最近记录: |