我们可能同意默认复制构造在 C++ 中大部分时间都很糟糕,因此最好使用 C++11=delete
或不可复制的类(如boost::noncopyable
.
问题是,当我们使用多重继承或公共抽象类时,在高级场景中会发生什么?
//Class uncopyable
class uncopyable {...};
//Interface1
class IInterface1 : private uncopyable
{
public:
IInterface1(...)
virtual ~IInterface1(...) = 0;
};
//Interface2
class IInterface2 : private uncopyable
{
public:
IInterface2(...)
virtual ~IInterface2(...) = 0;
};
//Fancy implementation
//FImpl
class FImpl : public IInterface1, public IInterface2, private : uncopyable
{
public:
FImpl(...) {...}
~FImpl(...) {...};
};
- 使每个接口都不可复制(似乎是,以避免切片)是一种好习惯吗?
- 向每个派生类添加不可复制是一种好习惯(显式保护,但会导致多重继承和菱形问题?)