虽然这是一个非常笼统的问题,但这是我的具体示例,因此您可以理解我的问题。
我有一个四叉树类的复制构造函数。因此,我编写了一个递归辅助方法,称为 copy,这样我就可以在我的复制构造函数中调用它。助手采用一个参数,一个节点。从构造函数调用时,根节点作为第一个参数给出。
所以现在在我的辅助方法中,我创建了一个新节点,将其命名为 newNode
,每个节点都有成员变量 neChild、nwChild、seChild、swChild----sw 表示西南 nw、ne、 se 都是基本方向,我将每个新 child 设置为等于 source.child 的 child 。然后我在每个 source.child(其中 4 个)上再次递归调用辅助方法。这样一来,1 个节点变成 4 个,然后有 16 个子节点,依此类推。然后我返回我创建的第一个 newNode
。
问题:
新返回的节点是否会附加所有其他节点?它会是树结构吗(虽然不是正式的树)?或者那些附加到返回指针的指针会超出范围吗?
最佳答案
你最终会得到一个新的根节点,它链接到与原始树相同的子节点。因此,对任何 child 所做的任何更改都会影响两棵树,您以后可能会遇到双重释放问题。
这是因为,尽管您正在递归调用 copy
,但您正在丢弃返回值。
此外,您说这个copy
函数是从您的复制构造函数调用的?你正处在一个痛苦的世界中,因为 copy
调用复制构造函数(在 return 语句中,因为你按值返回)。这是堆栈溢出的秘诀。我猜你来对地方了 ;)
关于c++ - C++ 中的指针作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5321133/