【发布时间】:2015-05-19 23:38:23
【问题描述】:
使用普通指针,我可以声明一个指针,然后将其设置为等于一个新对象,但是使用共享指针我无法做到这一点。为什么?
#include <memory>
struct node{
int num;
node* next;
};
int main()
{
std::shared_ptr<node> new_node1 = NULL; // WORKS
new_node1 = new node; // ERROR, why?
node* new_node2 = NULL; //WORKS
new_node2 = new node; //WORKS
return 0;
}
为什么我们不能为共享指针创建一个新对象?有没有办法做到这一点?
【问题讨论】:
-
我将如何使用 reset() 来做到这一点?
-
new_node1.reset (new node);或new_node1 = std::make_shared <node> (); -
只需点击一下即可解决。懒惰:\
-
对您的第一个问题的简短回答是,如果您可以轻松做到这一点,将会发生可怕的事情。考虑
Foo *f = new Foo(); bar(f); bar(f);。现在,如果bar采用std::shared_ptr<Foo>会发生什么? (想想临时共享指针的销毁。)您想确定在何时何地构造shared_ptr,因为它接管了对底层对象生命周期的控制。
标签: c++ pointers memory shared-memory shared-ptr