gpt4 book ai didi

c++ - 类复制操作,它是如何工作的?

转载 作者:搜寻专家 更新时间:2023-10-31 00:43:28 25 4
gpt4 key购买 nike

我有一个名为 QuadTree 的类。我最近为它创建了一个复制构造函数,即:

QuadTree(const QuadTree &cpy);

比如说我还没有填写这个构造函数。只要不使用它,代码就可以正常编译。现在,我有一个名为 subtractTrees 的函数:

QuadTree * subtractTrees(QuadTree LHS, QuadTree RHS);

在创建复制构造函数之前,这段代码工作得很好。现在,在使用此函数编译程序时出现以下错误:

Undefined Referance to QuadTree::QuadTree(QuadTree const&)

如在代码中使用了我的复制构造函数但尚未填写时会发生的错误。这是否意味着现在我有一个对被动函数的复制构造函数调用(subtractTrees)将调用复制构造函数?

如果是这样,有没有办法在仍然使用复制构造函数的同时阻止这种情况发生?我需要这样做的原因是复制用于这样的函数会大大减慢我的代码速度。但是我需要复制构造函数来轻松复制树。

编辑:我只是通过填写复制构造函数来修复错误,但问题更多关于

  1. 如果没有复制构造函数,它是如何工作的。
  2. 如果试图通过不在每次使用时都复制树来节省速度,是否有一种方法可以利用这种不需要复制构造函数的方法?

最佳答案

您必须为您的类 QuadTree 定义一个构造函数,当您这样做时,编译器不会生成隐式复制构造函数,它假定您会在需要时提供自己的构造函数。

当您添加按值采用类型 QuadTree 的函数时,需要一个复制构造函数来执行这些复制,因此编译器会报错。

QuadTree * subtractTrees(QuadTree LHS, QuadTree RHS);
^^^^^^^^^^^^ ^^^^^^^^^^^^^

按值传递需要复制构造函数。

如果是这样,有没有办法在仍然使用复制构造函数的同时阻止这种情况发生?

我不确定我是否理解这个问题。如果要创建类对象的拷贝,则需要复制构造函数。如果您想避免拷贝通过 const 引用传递您的对象。

QuadTree * subtractTrees(const QuadTree &LHS, const QuadTree &RHS);

关于c++ - 类复制操作,它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10527422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com