我最近了解到 auto_ptr
和 shared_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_ptr
或 shared_ptr
更符合您的要求。
关于c++ - 指针与 auto_ptr 与 shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3795625/