shared_ptr 赋值符号隐式转换
shared_ptr assignment notation implicit conversion
考虑以下代码,为什么我不能使用
这里的赋值符号,为什么认为是隐式转换。
shared_ptr<string> pNico = new string("nico"); // ERROR implicit conversion
shared_ptr<string> pNico{new string("nico")}; // OK
构造函数是明确的,以防止有人做这样的事情:
void foo(std::shared_ptr<std::string> s) { }
int main()
{
std::string s;
foo(&s);
}
如果它是隐式的,shared_ptr
可以获取堆栈分配变量的所有权并尝试删除它..这是没有意义的。
即
template< class Y >
explicit shared_ptr( Y* ptr );
explicit
关键字阻止复制初始化。
只有Converting constructors可以用于复制初始化。
考虑以下代码,为什么我不能使用 这里的赋值符号,为什么认为是隐式转换。
shared_ptr<string> pNico = new string("nico"); // ERROR implicit conversion
shared_ptr<string> pNico{new string("nico")}; // OK
构造函数是明确的,以防止有人做这样的事情:
void foo(std::shared_ptr<std::string> s) { }
int main()
{
std::string s;
foo(&s);
}
如果它是隐式的,shared_ptr
可以获取堆栈分配变量的所有权并尝试删除它..这是没有意义的。
即
template< class Y >
explicit shared_ptr( Y* ptr );
explicit
关键字阻止复制初始化。
只有Converting constructors可以用于复制初始化。