【问题标题】:Converting pointers to boost::shared_ptr将指针转换为 boost::shared_ptr
【发布时间】:2013-10-01 19:03:18
【问题描述】:
我有以下代码:
#include <boost\interprocess\file_mapping.hpp>
file_mapping* fm = new file_mapping(FilePath,read_only);
如何将此行转换为使用boost::shared_ptr?
每当我尝试shared_ptr<file_mapping> 时,我都会在右侧使用new 运算符得到编译错误。
【问题讨论】:
标签:
c++
boost
shared-ptr
smart-pointers
【解决方案1】:
shared_ptr<T> 的构造函数是explicit:您不希望有一个shared_ptr<T> 在完成后意外地获得您的T* 和delete 的所有权。因此,您需要从指针显式构造一个shared_ptr<T>,例如,
boost::shared_ptr<file_mapping> ptr(new file_mapping(FilePath, read_only));
...甚至是类似的东西
std::shared_ptr<file_mapping> ptr = std::make_shared<file_mapping>(FilePath, read_only);
【解决方案2】:
你可以使用:
boost::shared_ptr<file_mapping> fm_ptr(new file_mapping(FilePath, read_only));