以下代码在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)吗?

最佳答案

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


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

Foo foo = some_shared_ptr;


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

09-26 22:28
查看更多