创建对象后创建shared_ptr

cla*_*l3r 3 c++ heap stack shared-ptr

是否有区别:

Foo *foo = new Foo();
shared_ptr<Foo> sp(foo);
_fooVector.push_back(sp);
Run Code Online (Sandbox Code Playgroud)

shared_ptr<Foo> sp(new Foo());
_fooVector.push_back(sp);
Run Code Online (Sandbox Code Playgroud)

根据堆栈和堆.在我可以找到的所有示例中,都new在创建智能指针的同一行上使用.所以我想知道第一个例子是否有效.

For*_*veR 6

第一个例子如果有效,但它更加安全且使用正确make_shared.

shared_ptr<Foo> sp = make_shared<Foo>();
Run Code Online (Sandbox Code Playgroud)

在您的第一个示例中 - 您分配内存,使用此内存初始化指针,创建shared_pointer(shared_ptr现在拥有内存),然后将副本推送到向量).在第二个例子中 - 你分配内存,shared_ptr用这个内存初始化c-tor的参数然后如第一个例子.