使用boost shared_ptr时使用默认参数

时间:2013-06-26 13:24:05

标签: c++ boost shared-ptr

我已将shared_ptr作为参数运行,我希望此参数具有一些默认值。

void foo(boost::shared_ptr<myclass> ptr = nullptr);

因为ptr不是指针,而是一个类..

所以我该怎么办?

我发现了一个类似的问题: boost::shared_ptr and nullptr in default template function argument

但解决办法只是切换到std::shared_ptr,但我不能这样做

由于

4 个答案:

答案 0 :(得分:2)

boost::shared_ptr初始化nullptr是完全可以的。它有一个特殊的构造函数:

#if !defined( BOOST_NO_CXX11_NULLPTR )
shared_ptr( boost::detail::sp_nullptr_t ) BOOST_NOEXCEPT : px( 0 ), pn() // never throws
{
}
#endif

boost::detail::sp_nullptr_t以便携式方式解析为nullptr_t

答案 1 :(得分:2)

由于您使用的是nullptr,因此您必须使用C ++ 11,因此您应该可以这样做:

void foo(boost::shared_ptr<myclass> ptr = {});

这使默认参数成为默认构造的shared_ptr,与使用nullptr初始化的默认参数相同。它要求您的编译器支持统一初始化语法,而不是要求您的Boost版本支持从shared_ptr构建nullptr_t

如果您的编译器无法处理,请使用ForEveR的答案。

答案 2 :(得分:1)

为什么不简单?

void foo(boost::shared_ptr<myclass> ptr = boost::shared_ptr<myclass>());

答案 3 :(得分:1)

我认为问题不是“正在上课”,而是涉及的构造函数是明确的。而您的表单需要隐式转换。您可以使用明确的表单来处理它:boost::shared_ptr<myclass>(nullptr)boost::shared_ptr<myclass>(),无论您的版本支持哪种。