c++ - shared_ptr 赋值符号隐式转换

标签 c++ c++11 shared-ptr explicit

考虑以下代码,为什么我不能使用 这里的赋值符号,为什么认为是隐式转换。

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 可以获取堆栈分配变量的所有权并尝试删除它..这是没有意义的。

关于c++ - shared_ptr 赋值符号隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37490139/

相关文章:

c++ - typedef 包含模板化类的共享指针

c++ - Microsoft Visual C++ 中的共享指针调试

c++ - libstdc++新标准库特性支持表

c++ - 使用 new 运算符定义 std::shared_ptr 时出错

c++ - C++中的抽象类声明

c++ - 单击按钮时如何更改光标

c++ - 从 std::tuple of double 的 std::vector 读取线程安全?

c++ - 带有可变参数的嵌套 C++ 模板

c++ - 您与 Eclipse CDT 一起使用哪些插件?

如果给定空白正则表达式,则 regex_replace 中的 C++ Mac OS 无限循环