指针vs auto_ptr vs shared_ptr

Dim*_*eas 8 c++ pointers shared-ptr

我是最近推出的存在auto_ptr,并shared_ptr和我有一个非常简单的/幼稚的问题.

我尝试实现一个数据结构,我需要指出一个Node(超过1和它的)数字可能会改变的子节点.哪个是最好的选择,为什么:

class Node
{
    public:
        // ...
        Node *children;

    private:
        //...
}

class Node
{
    public:
        // ...
        share_ptr<Node> children;

    private:
        //...
}
Run Code Online (Sandbox Code Playgroud)

我不确定,但我认为auto_ptr对数组不起作用.我也不确定是否应该使用双指针.谢谢你的帮助.

Jer*_*fin 8

你是对的,auto_ptr不适用于数组.当它破坏它拥有的对象时,它会使用delete object;,所以如果你使用它new objects[whatever];,你将得到未定义的行为.也许更微妙一点,auto_ptr不符合"可复制"的要求(因为标准定义了术语),所以你不能创建任何一个容器(矢量,双端队列,列表等)auto_ptr.

A shared_ptr也适用于单个对象.这是针对您拥有共享所有权并且仅在所有所有者超出范围时才需要删除对象的情况.除非你有什么事情没有告诉我们,否则很可能它也不能很好地满足你的要求.

您可能希望查看另一个可能对您来说不熟悉的类:Boost ptr_vector.至少根据你所说的,它似乎比任何一个auto_ptr或更好地符合你的要求shared_ptr.