gpt4 book ai didi

c++ - std::shared_ptr - 我可以使用等号 (=) 进行初始化吗?

转载 作者:太空狗 更新时间:2023-10-29 23:49:23 25 4
gpt4 key购买 nike

来 self 对 the std::shared_ptr doc 的阅读, 你不能使用 =初始化 shared_ptr来自现有的指针。

如果你想从现有指针初始化,唯一可用的语法是
std::shared_ptr<int> p3 (new int);

问题

您不能使用 = 是否正确?初始化 shared_ptr如下所示:

std::shared_ptr<Foo> pFoo = new Foo(bar);

其他人(C++ 经验比我多)has stated你可以。

最佳答案

您无法初始化 std::shared_ptr那样是因为单个参数 constructor标记为 explicit .

但是您可以使用以下任何方式初始化它:

std::shared_ptr<Foo> pFoo(new Foo(bar));                         //direct-initialization
std::shared_ptr<Foo> pFoo{new Foo(bar)}; //direct-list-initialization

或者:

std::shared_ptr<Foo> pFoo = std::shared_ptr<Foo>(new Foo(bar));  //copy-initialization
std::shared_ptr<Foo> pFoo = std::shared_ptr<Foo>{new Foo(bar)}; //copy-initialization

最好还是使用 std::make_shared<Foo> 通常会做 a single allocation :

auto pFoo = std::make_shared<Foo>(bar);                       

关于c++ - std::shared_ptr - 我可以使用等号 (=) 进行初始化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42148323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com