我想让一个抽象基类不可复制,并强制从它派生的任何类不可复制。下面的代码使用了在 noncopyable.hpp 中定义的 Boost 的 noncopyable,但仍然允许派生类 D 定义一个复制构造函数。
class noncopyable
{
protected:
noncopyable() {}
~noncopyable() {}
private: // emphasize the following members are private
noncopyable( const noncopyable& );
const noncopyable& operator=( const noncopyable& );
};
class D : noncopyable
{
public:
D() { }
D(const D&) { }
};
int main()
{
D a;
D b(a);
return 0;
}
这段代码编译并运行(http://ideone.com/g4gGLm),当我预计它会抛出一个关于 D 的复制构造函数的编译时错误。也许我误解了这个不可复制类的意图。如果是这样,有没有办法强制派生类不定义复制构造函数?(答案可以用C++11,但最好不要boost)