【发布时间】:2017-06-18 10:10:45
【问题描述】:
这是一个菜鸟问题。下面的代码安全吗?
boost::unordered_set<std::string> func()
{
boost::shared_ptr<boost::unordered_set<std::string>> list =
boost::make_shared<boost::unordered_set<std::string>>();
/* Code to populate the shared_ptr to unordered_set goes here and I do
populate my set. */
return *list;
}
首先会发生什么?复制/NRVO/移动或破坏shared_ptr 导致内存故障?如果不安全,我的替代方案是什么?
【问题讨论】:
-
如果共享指针永远不会被共享,那是没有意义的。这是关于共享指针的问题(在这种情况下,您可能需要扩展您的示例)还是更多的是关于返回值优化的问题?
-
您也可以拥有
boost::unordered_set<std::string> list;和return list;,因为您所有的shared_ptr都在堆上分配了一些额外的东西,除非您共享所有权,否则这对您的情况不是最佳的的shared_ptr到其他地方。
标签: c++ c++11 boost shared-ptr