![]() |
1
8
我想这取决于你在哪里使用它们。我假设你想做的事情是这样的:
这是完全有道理的 如果 您希望您的数据结构能够处理动态创建的节点。然而,由于这不是正常的设计,我认为这是不合适的。 我的答案是不,这不是一个使用shared_ptr的合适地方,因为shared_ptr的使用意味着对象实际上是共享的——然而,二叉树中的节点是共享的 不 曾经分享过。然而,正如马丁·约克所指出的,为什么要重新发明轮子呢?已经有了一种智能指针类型,它可以实现我们正在尝试的功能——auto_ptr。那么就这样说吧:
如果有人问为什么数据不是共享的,答案很简单——如果数据的拷贝对用户有好处的话 客户 对于库,它们传入数据项,树节点创建一个副本。如果 客户 认为复制是个坏主意,然后 代码可以传入共享的_ptr,树节点可以安全地复制它。 |
![]() |
2
3
因为左侧和右侧不是共享的boost::shared_ptr<&燃气轮机;可能不是正确的智能指针。 这将是一个尝试std::auto_ptr<&燃气轮机; |
![]() |
3
2
但是,如果您有一个循环数据结构,请小心。如果您有两个对象,它们都彼此具有共享ptr,那么如果不手动清除共享ptr,它们将永远不会被释放。在这种情况下,可以使用弱ptr。当然,这不是二叉树的问题。 |
![]() |
4
2
根据定义,一棵树由节点组成,每个节点都有一个父节点,因此显然是它们的单一所有者的候选节点,因此这是一个非常愉快的时刻。祝贺
我认为,在你的情况下,开发这样一个解决方案,并尝试
(*对我们来说,如果你告诉我们进展如何。) |
![]() |
5
1
切勿对数据结构的节点使用共享ptr。如果在任何一点上共享了所有权,则会导致暂停或延迟节点的销毁。这可能导致以错误的顺序调用析构函数。 在数据结构中,节点的构造函数包含与其他节点耦合的任何代码,析构函数包含与其他节点解耦合的代码是一种很好的做法。按错误顺序调用的析构函数可能会破坏此设计。 |
![]() |
6
0
共享的ptr有一点额外的开销,特别是在空间需求方面,但是如果您的元素是单独分配的,那么共享的ptr将是完美的。 |
![]() |
7
0
你需要指针吗?看来你可以用
|