使用普通指针,我可以声明一个指针,然后将其设置为等于一个新对象,但是对于共享指针,我无法做到这一点。为什么呢?
#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;
}
为什么我们不能为共享指针创建新对象?有办法吗?
答案 0 :(得分:3)
std::shared_ptr<node> n(new node);
n.reset(new node);
n = std::make_shared<node>();
答案 1 :(得分:1)
这是因为在operator=()
调用期间调用的构造函数标记为explicit
。
解决这个问题:
new_node1 = std::shared_ptr<node>(new node);
或者:
new_node1 = std::make_shared<node>();