带有智能指针的 C++11 向量

C++11 vector with smart pointer

我阅读了很多关于矢量现代用法的文档。

其中一个常见的事情是,“你可以用 emplace_back 替换每个 push_back”。是真的吗?我不确定,事实是我不明白智能指针的意思。

那么,放置智能指针与将其推入向量有区别吗?

换句话说:

myVector.emplace_back(std::make_shared< XXX >(x, y, z));

VS

myVector.push_back(std::make_shared< XXX >(x, y, z));

我阅读了一条关于放置智能指针的评论,以及在插入导致内存泄漏之前引发的可能异常(低内存)。是真的吗? Memory leaking

最后,我希望写这样的东西:

myVector.emplace_back(x, y, z);

但我很确定,我可以忘记它。所以这就是为什么我正在考虑使用智能指针放置的真正好处。

问题开头的 emplace_backpush_back 没有区别,它们都提供一个纯右值 std::shared_ptr<XXX> ,它将被传递给向量元素的移动构造函数.

如果 myVector 成立 std::shared_ptr<XXX>,则不能 myVector.emplace_back(x, y, z);,因为没有 std::shared_ptr<XXX> 的构造函数接受这些参数。如果它是 std::vector<XXX>,您可以这样做,这样就可以构建一个 XXX

然而,其中大部分内容都没有实际意义,因为复制省略意味着允许实现就地构造共享指针。