c++ - 指针与 auto_ptr 与 shared_ptr

标签 c++ pointers shared-ptr

我最近了解到 auto_ptrshared_ptr 的存在,我有一个非常简单/幼稚的问题。

我尝试实现一个数据结构,我需要指向一个 Node 的子节点,其中(大于 1 及其)数量可能会改变。哪个是最好的选择,为什么:

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

    private:
        //...
}

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

    private:
        //...
}

我不确定,但我认为 auto_ptr 不适用于数组。我也不确定是否应该使用双指针。感谢您的帮助。

最佳答案

你说得对,auto_ptr 不适用于数组。当它销毁它拥有的对象时,它使用 delete object;,所以如果你使用 new objects[whatever];,你将得到未定义的行为。也许更微妙一点,auto_ptr 不符合“可复制”的要求(正如标准定义的术语),因此您无法创建容器(vector、deque、list 等) auto_ptr 之一。

shared_ptr 也适用于单个对象。它适用于您拥有共享所有权并且仅当所有所有者超出范围时才需要删除对象的情况。除非发生了您没有告诉我们的事情,否则很有可能它也不太符合您的要求。

你可能想看看另一个对你来说可能是新的类:Boost ptr_vector .至少根据您所说的,它似乎比 auto_ptrshared_ptr 更符合您的要求。

关于c++ - 指针与 auto_ptr 与 shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3795625/

相关文章:

c++ - C++在内存的什么地方创建栈和堆?

c++ - 使用 createprocess() 时的类型转换问题

c++ - 在程序中创建一个值的界限

c++ - 将 FFmpeg 与 Direct Show 结合使用

c++ - QSharedPointer 和 QSharedDataPointer 的区别?

c - 使用类型定义的数据类型取消引用通用指针

c++ - 继承类中的 shared_from_this() 类型错误(是否有 dyn.type-aware 共享指针?)

c++ - std::shared_ptr 的用法

c++ - 包含指向自身的智能指针的对象,在对象超出范围之前不会重置

c++ - 将 weak_ptr 与原始指针进行比较不起作用,正在寻找替代方案