以下代码在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
的构造函数没有影响,因此仍然允许从nullptr
到shared_ptr
的隐式转换。