最近我遇到了以下问题。我无法弄清楚原因。有人能指出我。
什么是“缓冲”的父类?为什么你认为这被选为父类?使用这个父类的主要限制是什么?
示例代码
template <typename T>
class Buffered : private boost::noncopyable
{
public:
explicit Buffered (const T& value = T())
: current_ (value), next_ (value) {}
virtual ~Buffered() {}
const T& get() const {
return current_;
}
void set (const T& value) {
next_ = value;
}
void skip() {
this->set(this->get());
}
void force(const T& value) {
next_ = current_ = value;
}
void flip() {
current_ = next_;
}
private:
T current_;
T next_;
};
答案 0 :(得分:3)
如果您不希望自己的用户能够通过复制来创建班级的任何实例(在这种情况下为Buffered
),则可以从 boost::noncopyable 中派生您的班级。
简而言之,它使您的类不可复制。
提升文件明确说明了目的:
//私有拷贝构造函数和拷贝赋值确保从中派生的类 //无法复制class noncopyable。
如果您没有使用提升,那么您可以通过以下方式使您的课程不可复制:
private
&amp; 如果有人试图复制你的类实例,第一个会给你一个编译错误
第二个通过给出链接错误来防止通过friend
间接复制。
答案 1 :(得分:2)
在C ++ 11中,您还可以说
之类的内容class Class {
Class (Class const & other) = delete;
};
如果您尝试使用成员函数/友元函数访问它,则会出现编译时错误,而不是链接器错误。