Edu*_*yan 12 c++ inheritance implementation noncopyable
根据我最喜欢的作者斯科特迈耶斯先生的说法,私人继承和组合意味着同样的事情,即Has-A关系.因此,可以通过私有继承获得从组合中获得的所有东西(包含A类,其中A类具有B类成员),反之亦然.
所以下面的代码应该是Has-A关系,但从我的观点来看,它不是!
class A : private boost::noncopyable {.. this is irrelevant };
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我,我失踪了吗?或者如何通过合成实现此代码?
vll*_*vll 15
您的示例可以通过以下组合实现:
class A {
private:
class B {
B(const B&) = delete;
B& operator=(const B&) = delete;
} b;
};
Run Code Online (Sandbox Code Playgroud)
A是不可复制的,因为其成员b是不可复制的.
你的例子仍然是一个HAS-A关系.
给出以下类作为示例,大致相当于boost:noncopyable:
class X {
private:
X(const X &);
X &operator=(const X &);
public:
X() {}
};
Run Code Online (Sandbox Code Playgroud)
以下两个类具有相同的功能:
class A : private X {
public:
int a;
char b;
};
class B {
public:
int a;
char b;
X x;
};
Run Code Online (Sandbox Code Playgroud)
在这个例子中,A从私下继承X而B包含的一个实例X. A无法复制,因为它无法调用父的复制构造函数,并且B无法复制,因为它无法调用其成员之一的复制构造函数.
A a1;
A a2(a1); // error
B b1;
B b2(b1); // error
Run Code Online (Sandbox Code Playgroud)