gpt4 book ai didi

c++ - 数据结构是否适合放置 shared_ptr?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:58 25 4
gpt4 key购买 nike

我正在用 C++ 实现二叉树。传统上,我会有一个指向左的指针和一个指向右的指针,但手动内存管理通常以泪水告终。这引出了我的问题......

数据结构是否适合使用 shared_ptr?

最佳答案

我认为这取决于您将在哪里使用它们。我假设你想做的是这样的:

template <class T>
class BinaryTreeNode
{
//public interface ignored for this example
private:
shared_ptr<BinaryTreeNode<T> > left;
shared_ptr<BinaryTreeNode<T> > right;
T data;
}

如果您希望您的数据结构能够处理动态创建的节点,这将非常有意义。但是,由于这不是正常的设计,我认为这是不合适的。

我的回答是不,这不是使用 shared_ptr 的合适位置,因为使用 shared_ptr 意味着该对象实际上是共享的 - 然而,二叉树中的节点从来没有共享。然而,正如 Martin York 所指出的,为什么要重新发明轮子——已经有一种智能指针类型可以完成我们正在尝试做的事情——auto_ptr。所以选择这样的东西:

template <class T>
class BinaryTreeNode
{
//public interface ignored for this example
private:
auto_ptr<BinaryTreeNode<T> > left;
auto_ptr<BinaryTreeNode<T> > right;
T data;
}

如果有人问为什么数据不是 shared_ptr,答案很简单 - 如果数据的拷贝对库的客户端 有好处,它们会传入数据项和树节点制作拷贝。如果客户端 认为复制不是一个好主意,那么客户端 代码可以传入一个 shared_ptr,树节点可以安全地复制它。

关于c++ - 数据结构是否适合放置 shared_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/376335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com