以下代码使用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)吗?
答案 0 :(得分:4)
不应该显式阻止编译器隐式调用std :: shared_ptr(nullptr)吗?
不,显式构造函数会阻止这种情况发生:
Foo foo = some_shared_ptr;
它对shared_ptr
的构造函数没有影响,因此仍允许从nullptr
到shared_ptr
的隐式转换。