gli*_*ite 7 c++ pointers smart-pointers c++11
我有一个类如下:
class node
{
public:
node* parent;
std::list<node*> children;
};
Run Code Online (Sandbox Code Playgroud)
我应该使用智能指针而不是原始指针吗?为什么?如果是的话,什么样的智能指针?
Pup*_*ppy 16
无论您拥有哪些资源(内存,文件等),都要始终使用智能指针.手动拥有它们非常容易出错,并且违反了许多良好实践,例如DRY.
使用哪一个取决于您需要的所有权语义.unique_ptr最适合单一所有权和shared_ptr共享所有权.
由于孩子不拥有他们的父母,原始的父指针是好的.但是,如果父母拥有自己的孩子,那么unique_ptr这里工作效果最好.
还有一点值得注意的是,究竟是什么链接指针?这是没有意义的.为什么不是一个价值链表?
使用智能指针总是一个好主意,但要注意引用循环.
class node
{
public:
std::weak_ptr<node> parent;
std::list< std::shared_ptr<node> > children;
};
Run Code Online (Sandbox Code Playgroud)
这就是为什么首先存在的原因weak_ptr.请注意,他们不是那么聪明地检测循环,你必须手动完成,并使用weak_ptrs 打破它们.