在继承中提升库

boost library in Inheritance

本文关键字:继承      更新时间:2023-10-16

最近我遇到了以下问题。我想不通原因。谁能指出我。

"缓冲"的父类是什么?您认为为什么选择这作为父类?使用此父类的主要限制是什么?

示例代码

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

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

提升文档清楚地说明了目的:

私有副本构造函数和副本赋值确保类派生自
无法复制不可复制的类。

如果您没有使用 boost,那么您可以通过以下方式使您的类不可复制:

  • 声明类复制构造函数和复制赋值运算符private
  • 没有为它们提供任何定义。

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

在 C++11 中,你也可以说类似

class Class {
    Class (Class const & other) = delete;
};

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