gpt4 book ai didi

c++ - "member of type foo has private copy constructor"错误 : why's it an error?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:18 24 4
gpt4 key购买 nike

我试图定义这样一个类:

#include <library/foo.h>

class my_class {
private:
someone_elses foo;
public:
myclass();
~myclass();
//...
};

但是编译器失败了:“someone_elses 类型的字段 foo 有一个私有(private)的复制构造函数”。现在我知道我可以通过以下方式解决这个问题:

class my_class {
private:
someone_elses *foo;
//...
};

my_class::my_class() { foo = new someone_elses(); }
my_class::~my_class() { delete foo; }

我的问题是为什么编译器关心对象的字段是否实现了可访问的复制构造函数?

最佳答案

在第一个版本中,当你复制 my_class 的实例时,你必须在你没有向我们展示的地方,你正在做 someone_elses 的深度复制>.

在后一个版本中,当你做同样的事情时,你正在制作一个指向 someone_elses 实例的指针的浅表拷贝。因此,您不会制作拷贝,而是在 my_class 的两个拷贝中拥有指向同一实例的指针。

由于您实际上是在析构函数中删除 someone_elses,因此您将遇到各种问题。您需要能够复制 someone_elses 但由于某些原因您似乎不允许这样做,因为该类的作者认为它非常重要以至于他们不可能做到这一点。

如何回应这个问题很大程度上取决于你遗漏的细节。可能是您不允许复制 my_class 并且也应该将其复制构造函数设为私有(private)。这当然会在其他地方破坏某些东西,因为如果不使用该构造函数,则不会创建该构造函数。

关于c++ - "member of type foo has private copy constructor"错误 : why's it an error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10656076/

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