当前位置:  开发笔记 > 编程语言 > 正文

数据结构是shared_ptr的合适位置吗?

如何解决《数据结构是shared_ptr的合适位置吗?》经验,为你挑选了1个好方法。

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

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



1> Harper Shelb..:

我认为这取决于你在哪里使用它们.我假设你想做的事情是这样的:

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

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

我的答案是不,它不适合使用shared_ptr,因为使用shared_ptr意味着对象实际上是共享的 - 但是,二进制树中的节点不会被共享.然而,正如马丁约克指出的那样,为什么重新发明轮子 - 已经有一种智能指针类型可以完成我们正在尝试做的事情 - auto_ptr.所以请使用以下内容:

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

如果有人问为什么数据不是shared_ptr,答案很简单 - 如果数据的副本对于库的客户端是好的,则它们传入数据项,并且树节点进行复制.如果客户端决定副本是个坏主意,那么客户端代码可以传入shared_ptr,树节点可以安全地复制.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有