c++ - 递归复制构造函数?

标签 c++ constructor

我正在尝试编写一个复制构造函数,它采用四叉树的一个节点,并复制该节点及其所有子节点,等等。这是我拥有的:

 Node(const Node & n) {

    nChild=new Node(*(n.nwChild));
    neChild=new Node(*(n.nChild));
    eChild=new Node(*(n.seChild));
    wChild=new Node(*(n.sChild));   
}

我觉得最后 4 行有点古怪。我的做法有意义吗?

最佳答案

您的构造函数不是异常安全的 - 假设第二个 new 抛出 bad_alloc,那么第一个将如何清理?

通过将 Child 字段更改为您最喜欢的智能指针,您可能会让自己的生活更轻松。如果您没有最喜欢的智能指针,请介绍一下自己;-)

[编辑:刚刚注意到您没有提供数据成员定义,我只是假设它们是原始指针。如果它们已经是智能指针,我们深表歉意。]

提前输出看起来有点奇怪——如果 rhs 上的所有四个 child 都为 NULL,那么 x/y/height/width 怎么没有被复制?通常这些成员将由初始化列表处理。如果任何 子级为 NULL,而不是所有,您是否应该做一些特别的事情?目前你不处理一个方向有 child 的节点,但不是所有 4 个。如果你的树的一个属性是每个节点有 4 个 child 或没有,那么你不需要检查所有 4 个,但你 复制叶节点时是否需要初始化各个字段。如果一个节点可能恰好有 1 个子节点,那么您没有正确复制该节点。

除此之外,基本逻辑对我来说似乎没问题,如果没有任何问题,它将递归复制。

关于c++ - 递归复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5333159/

相关文章:

c++ - 语法错误 : Identifier 'string' error C2061

c++ - 使用 std::enable_if 禁用构造函数

Java 无参数构造函数 : Throw impossible exception, 或有空 catch block ?

C++ 嵌套构造函数调用与函数声明

c++ - 如何在没有安装visual studio的另一台机器上使用visual studio生成的dll?

c++ - 自定义列表类的初始值设定项列表构造函数

c++ - 没有 aero 对话框无法正确显示

C++:如何将字符串拆分为大小均匀的较小字符串?

java - 代码调用 new GenericObject() 但 GenericObject.java 没有构造函数

c++ - 继承构造函数是否适用于 C++0x 中的模板?