在继承中提升库

时间:2012-04-13 03:27:43

标签: c++ boost

最近我遇到了以下问题。我无法弄清楚原因。有人能指出我。

什么是“缓冲”的父类?为什么你认为这被选为父类?使用这个父类的主要限制是什么?

示例代码

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_;
};

2 个答案:

答案 0 :(得分:3)

如果您不希望自己的用户能够通过复制来创建班级的任何实例(在这种情况下为Buffered),则可以从 boost::noncopyable 中派生您的班级。
简而言之,它使您的类不可复制。

提升文件明确说明了目的:

  

//私有拷贝构造函数和拷贝赋值确保从中派生的类   //无法复制class noncopyable。

如果您没有使用提升,那么您可以通过以下方式使您的课程不可复制:

  • 声明类复制构造函数和复制赋值运算符private&amp;
  • 不提供任何定义。

如果有人试图复制你的类实例,第一个会给你一个编译错误 第二个通过给出链接错误来防止通过friend间接复制。

答案 1 :(得分:2)

在C ++ 11中,您还可以说

之类的内容
class Class {
    Class (Class const & other) = delete;
};

如果您尝试使用成员函数/友元函数访问它,则会出现编译时错误,而不是链接器错误。