为什么显式构造函数期望std :: shared_ptr接受nullptr?

时间:2014-04-02 23:13:32

标签: c++ c++11 explicit

以下代码使用gcc 4.8.1

进行编译
#include <memory>

class Foo {
public:
     explicit Foo(const std::shared_ptr<Foo>& foo) {

     }
};

int main() {
    Foo foo(nullptr);
}

为什么这可能?不应该显式阻止编译器隐式调用std :: shared_ptr(nullptr)吗?

1 个答案:

答案 0 :(得分:4)

  

不应该显式阻止编译器隐式调用std :: shared_ptr(nullptr)吗?

不,显式构造函数会阻止这种情况发生:

Foo foo = some_shared_ptr;

它对shared_ptr的构造函数没有影响,因此仍允许从nullptrshared_ptr的隐式转换。