2011-08-06 3 views
2
class NotCopyable 
{ 
public: 
    NotCopyable() { } 
private: 
    NotCopyable(const NotCopyable&); 
    NotCopyable& operator = (const NotCopyable&); 
}; 

class BasicTimer : private NotCopyable 
{ 
public: 
     ... 
} 

私的継承を使用する権利はありますか?これは私的継承を使用する権利ですか?

答えて

2

はい、プライベートなメンバーの可視性は完全に許容可能であり、よくあることです。それはNotCopyable、またはそれから派生したものをコピーしないようにします。

+0

NotCopyable(){}をプライベートクラスとして宣言してみませんか? – Kim

+4

@Kim:(friend修飾子を考慮して)少なくともアクセシビリティを保護しているコンストラクタがない場合は、派生クラスのオブジェクトを構築することはできません。 –

2

はい。

Boostはまったく同じことを行います。

1

それは常に派生クラスで利用できるようになりますので、このクラスは完全にOKでもお勧めですここ

0

特別何もしていないされ、プライベート、パブリックまたはprotected.So private継承と継承されているかどうかNotCopyableのコンストラクタは、公開されています。

ブーストライブラリにはboost :: noncopyableが用意されています。それはあなたのコードをより読みやすくします。誰がこれを入れたいのですか?

class Bla 
{ 
    // bla bla bla... 

private: 
    Bla(const Bla &); // not implemented. 
    Bla & operator=(const Bla &); // not implemented. 
}; 

次のように書けるのは簡単ですか?

class Bla : boost::noncopyable 
{ 
    // bla bla bla... 
}; 
関連する問題