带有智能指针的 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_back
和 push_back
没有区别,它们都提供一个纯右值 std::shared_ptr<XXX>
,它将被传递给向量元素的移动构造函数.
如果 myVector
成立 std::shared_ptr<XXX>
,则不能 myVector.emplace_back(x, y, z);
,因为没有 std::shared_ptr<XXX>
的构造函数接受这些参数。如果它是 std::vector<XXX>
,您可以这样做,这样就可以构建一个 XXX
。
然而,其中大部分内容都没有实际意义,因为复制省略意味着允许实现就地构造共享指针。
我阅读了很多关于矢量现代用法的文档。
其中一个常见的事情是,“你可以用 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_back
和 push_back
没有区别,它们都提供一个纯右值 std::shared_ptr<XXX>
,它将被传递给向量元素的移动构造函数.
如果 myVector
成立 std::shared_ptr<XXX>
,则不能 myVector.emplace_back(x, y, z);
,因为没有 std::shared_ptr<XXX>
的构造函数接受这些参数。如果它是 std::vector<XXX>
,您可以这样做,这样就可以构建一个 XXX
。
然而,其中大部分内容都没有实际意义,因为复制省略意味着允许实现就地构造共享指针。