【发布时间】:2014-09-17 08:27:52
【问题描述】:
当您实例化对象并将它们存储在向量中时。 这三者之间的优缺点是什么,应该在什么情况下使用它们?
对象:
std::vector<obj> collection;
collection.push_back(obj{});
指向对象的指针:
std::vector<obj*> collection;
collection.push_back(new obj{});
智能指针:
std::vector<std::unique_ptr<obj>> collection;
collection.push_back(std::unique_ptr<obj>(new obj{}));
【问题讨论】:
-
这取决于您要处理的对象的生命周期
-
这还取决于您的对象是否可以安全和/或有效地复制。
-
@MarcoA。在 RAII 和 smart Pointer 的情况下,对象的生命周期不取决于 std::vector 的生命周期吗?
-
@worker11811 是的。在这种情况下,您几乎总是最好使用第一种方法(我当然不会有资格作为 RAII)。
-
简短回答 - 使用对象,除非你不能,在这种情况下使用智能指针