1
4

3 回答 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#Membersboost::shared_ptr不能由空指针常量初始化,因为对于指针构造函数,它由Y*where Yis模板化模板参数。Y*推导时不考虑空指针常量到的转换Y*,因此构造函数会出现推导失败,传递时被忽略nullptr

但是std::shared_ptr可以接受,因为它有std::nullptr_t过载,所以如果你愿意,你可以切换。

请注意,传递nullptr与传递空指针(如(T*)nullptr. 后者不会使用constexpr构造函数,但前者会(以及其他差异)。因此,在前一种情况下,如果您的指针是命名空间范围变量,它具有常量初始化,并且不会引发与其他翻译单元中的命名空间范围对象的初始化竞争。

于 2012-12-09T11:56:21.630 回答