我们大概可以认为C++中大多数时候默认的复制构造是不好的,所以最好用C++ 11 =delete
或非可复制类如boost::noncopyable
。C++非可复制类和多继承,纯抽象类
问题是,当我们使用多重继承或公共抽象类时,高级方案会发生什么?
//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(...) {...};
};
- 它是一个很好的做法,使每一个接口不可复制的(现在看来,这是 ,避免切片)?
- 它是一个很好的做法,加上不可复制到 每一个派生类(明确的保障,但导致多个 继承和钻石的问题?)
您的界面根本不像界面。他们定义了构造函数,并且没有纯虚方法(只有某种看起来像违反语法的析构函数)。 – Juliano 2012-08-04 15:17:17
'〜IInterface1(...)= 0'只是语法错误。而且你不想让析构函数变为纯虚拟的。 – 2012-08-04 15:19:02
好的,修好了。使用伪代码,而不是真正的代码。 – Coder 2012-08-04 15:21:32