0

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

“Buffered”的父类是什么?你认为为什么选择它作为父类?使用这个父类的主要限制是什么?

示例代码

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

2 回答 2

3

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

增强文档清楚地说明了目的:

// 私有复制构造函数和复制赋值确保从
// 类不可复制的类派生的类不能被复制。

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

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

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

于 2012-04-13T03:29:34.723 回答
2

在 C++11 中,你也可以这样说

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

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

于 2012-04-13T03:45:56.290 回答