问问题
5776 次
3 回答
3
Boost::shared_ptr 从 1.53 版本开始支持 std::nullptr_t 的构造函数。
于 2012-12-15T16:27:08.523 回答
2
这将适用于 std::shared_ptr 而不是 boost::shared_ptr 我认为
于 2012-12-09T11:55:57.993 回答
2
根据http://www.boost.org/doc/libs/1_52_0/libs/smart_ptr/shared_ptr.htm#Members,boost::shared_ptr
不能由空指针常量初始化,因为对于指针构造函数,它由Y*
where Y
is模板化模板参数。Y*
推导时不考虑空指针常量到的转换Y*
,因此构造函数会出现推导失败,传递时被忽略nullptr
。
但是std::shared_ptr
可以接受,因为它有std::nullptr_t
过载,所以如果你愿意,你可以切换。
请注意,传递nullptr
与传递空指针(如(T*)nullptr
. 后者不会使用constexpr
构造函数,但前者会(以及其他差异)。因此,在前一种情况下,如果您的指针是命名空间范围变量,它具有常量初始化,并且不会引发与其他翻译单元中的命名空间范围对象的初始化竞争。
于 2012-12-09T11:56:21.630 回答