【发布时间】:2013-03-06 17:31:45
【问题描述】:
我想让一个抽象基类不可复制,并强制从它派生的任何类不可复制。下面的代码使用了 noncopyable.hpp 中定义的 Boost 的不可复制,但仍然允许派生类 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)
【问题讨论】:
标签: c++ copy-constructor noncopyable