我看到很多人使用vector<shared_ptr<T>>
的情况。您何时以及为何使用shared_ptr<vector<T>>
代替?对我来说,后者在性能和内存使用方面似乎都更有效。在整个应用程序中共享一个对象向量是错误的吗?
由于
答案 0 :(得分:7)
此用法:vector<shared_ptr<T>>
将允许您将此向量中的T
类型的实例传递给代码的其他部分,而不必担心它们不会被释放。即使你的矢量将不复存在。
shared_ptr<vector<T>>
仅保护向量,其T
类型的元素不受内存泄漏的保护。我假设T
是指针类型,如果T
是非指针,那么你当然不会在这里造成内存泄漏问题。那么有人可以实际{。}}。
使用T = shared_ptr<T>
实际上更常见,我真的不记得使用vector<shared_ptr<T>>
。
关键是永远不要在你的代码中保留指向已分配内存的指针,始终将它们保存在某种智能指针中。如果你实现自己的分配/解除分配机制,那就完全没问题,即使用RAII。