我正在用C++实现二叉树.传统上,我有一个指向左侧的指针和一个指向右侧的指针,但是手动内存管理通常会以泪流满面.这引出了我的问题......
数据结构是否适合使用shared_ptr?
我认为这取决于你在哪里使用它们.我假设你想做的事情是这样的:
templateclass BinaryTreeNode { //public interface ignored for this example private: shared_ptr > left; shared_ptr > right; T data; }
如果您希望数据结构能够处理动态创建的节点,那么这将非常有意义.但是,由于这不是正常的设计,我认为这是不合适的.
我的答案是不,它不适合使用shared_ptr,因为使用shared_ptr意味着对象实际上是共享的 - 但是,二进制树中的节点不会被共享.然而,正如马丁约克指出的那样,为什么重新发明轮子 - 已经有一种智能指针类型可以完成我们正在尝试做的事情 - auto_ptr.所以请使用以下内容:
templateclass BinaryTreeNode { //public interface ignored for this example private: auto_ptr > left; auto_ptr > right; T data; }
如果有人问为什么数据不是shared_ptr,答案很简单 - 如果数据的副本对于库的客户端是好的,则它们传入数据项,并且树节点进行复制.如果客户端决定副本是个坏主意,那么客户端代码可以传入shared_ptr,树节点可以安全地复制.