4

VS2012 では、「明示的にデフォルトおよび削除された特別なメンバー関数」機能 ( http://en.wikipedia.org/wiki/C++0x#Explicitly_defaulted_and_deleted_special_member_functionshttp://www.open-std.org/jtc1/sc22/ wg21/docs/papers/2007/n2346.htm ) はまだ利用できません ( http://msdn.microsoft.com/en-us/library/vstudio/hh567368.aspx )。非常に冗長であっても、そのような機能を使用するための回避策はありますか? 実際には、これを翻訳できますか

struct NonCopyable {
    NonCopyable() = default;      
    NonCopyable(const NonCopyable&) = delete;                
    NonCopyable & operator=(const NonCopyable&) = delete;    
};

defaultdelete?を使用せずに、同じ機能を持つものにします。どのように?

4

2 に答える 2

4

そうです、これらの機能はまだ利用できません。

ただし、これを行うことができます:

struct NonCopyable {
    // ...

private:      
    NonCopyable(const NonCopyable&);
    NonCopyable & operator=(const NonCopyable&);
};

copy-constructorcopy-assignment-operator (定義なし) を private として宣言するだけで、それらを使用できなくなります。だからそれはあなたが望む効果として。

ここでの良い答え: https://stackoverflow.com/a/2173764/1394283

于 2013-09-08T08:23:28.510 に答える
2

コピー不可のクラスを作成したいようです。C++11 ではdelete、この機能を簡単に提供できる関数が導入されていますが、C++11 以前では、次の方法で同じことを実現できます。

  • コピー コンストラクターとコピー代入演算子をprivateandとして宣言します。
  • 両方の定義を提供しないでください。

よく読んでください:
コピー不可能な Mixin

于 2013-09-08T08:09:18.950 に答える