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から派生させました。
つまり、クラスをコピー不可にします。

ブーストのドキュメントには、目的が明確に記載されています。

// プライベート コピー コンストラクターとコピー割り当てにより、// クラス noncopyable から派生したクラスを
コピーできないことが保証されます。

ブーストを使用していない場合は、次の方法でクラスをコピー不可にすることができます。

  • クラスのコピー コンストラクターとコピー代入演算子private&の宣言
  • 両方の定義を提供していません。


1 つ目は、誰かがクラス インスタンスをコピーしようとした場合にコンパイル エラーfriendを発生させます。

于 2012-04-13T03:29:34.723 に答える
2

C ++ 11では、次のように言うこともできます

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

次に、メンバー関数/フレンド関数を使用してアクセスしようとすると、リンカーエラーではなく、コンパイル時エラーが発生します。

于 2012-04-13T03:45:56.290 に答える