2017-01-17 2 views
-3

私の先生は大手3人のうちの1人(コピーコンストラクタ\ default \ assignment)を使用しているときにコンパイラがsuplly meを行っていないことを教えてくれましたもう一方は無料で、私は自分でそれらを実装する必要があります。 は、しかし、私はこのようなコンストラクタを実装してみました:CPPの1つを実装するための3つのルールはどれくらいですか

A(int a): integer(a){}; 

をそして私はこれを行うには、しかし、成功する:それは可能であるどのように

A my_first_ob(100); 
A my_second_ob(my_first_ob); 

? 誰かが私にここのものをクリアできるのでしょうか?

+1

あなたの教師は、デフォルト以外のコンストラクタがコピーコンストラクタの自動生成を停止していると教えてくれましたか? – NathanOliver

+2

いいえ、3つのルールはそれを意味するものではありません。 –

+4

[3のルールとは何か]の複製がありますか?(http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three) –

答えて

0

実装したコンストラクタは、コピーコンストラクタまたはデフォルトのコンストラクタではないため、先生が言ったこととは何の関係もありません。

あなたとあなたの先生のどちらかが2つのルールを混同していると思います。デフォルト以外のコンストラクタが、無デフォルトコンストラクタを実装する場合

一つのルールが

  • で、「コンパイラで生成された」デフォルトコンストラクタが暗黙的に削除されます。
    自分で定義したい場合は、自分で定義する必要があります。 (C++ 11では、あなたが= default;を使用することができます。)

(そこ削除する「特別なメンバ関数」を起こすより多くの状況ではありますが、これは1ほとんどの人が最初に遭遇です。)

あなたはコピーコンストラクタ、デストラクタ、または代入演算子を実装する必要がある場合は

(親指のより規則である「3の法則」、)他のルールは、あなたがおそらくすべて実装する必要がある、

  • です3、すぐにそれを行う。
関連する問題