【发布时间】:2012-05-18 16:07:23
【问题描述】:
我试图定义一个这样的类:
#include <library/foo.h>
class my_class {
private:
someone_elses foo;
public:
myclass();
~myclass();
//...
};
但是编译器失败了:“someone_elses 类型的字段 foo 有一个私有复制构造函数”。现在我知道我可以通过以下方式解决这个问题:
class my_class {
private:
someone_elses *foo;
//...
};
my_class::my_class() { foo = new someone_elses(); }
my_class::~my_class() { delete foo; }
我的问题是为什么编译器会关心对象的字段是否实现了可访问的复制构造函数?
【问题讨论】:
-
出现错误的代码行是什么?
-
不出所料,这是
foo字段的声明;-) -
因为你的类
my_class有一个隐式的编译器生成的复制构造函数,它只复制所有字段。如果someone_elses具有私有复制构造函数,则无法复制foo字段。您应该为my_class编写自己的复制构造函数,以实现正确的复制。 -
我猜你在某个地方试图复制这样的对象。就像按值传递给函数一样。
-
Aside:“我知道我可以解决这个问题”——不是真的。不要忘记Rule of Three。
标签: c++ class copy-constructor