2017-12-07 31 views
-2

このコードは正常に動作します。 setter関数を呼び出す代わりにコンストラクタを使用し、オブジェクトのコンストラクタを複数回呼び出しています。 1つのオブジェクトに対してコンストラクタが1回しか呼び出されないのですか?私のようにするのは間違いありませんか?オブジェクトのコンストラクタを複数回呼び出す

ifstream myfile; 
    myfile.open("phones.txt"); 
    DirectoryEntry *TelephoneDirectory = new DirectoryEntry[size]; // default constructor 
    for (int i = 0; i < size; i++) 
    { 
     TelephoneDirectory[i] = DirectoryEntry(myfile); // parameterized constructor 
    } 
    myfile.close(); 
+0

他にどのようなクラスのインスタンスを複数作成しますか?各呼び出しは_new_オブジェクトを作成します。 – ForceBru

+5

"と私はオブジェクトのコンストラクタを複数回呼び出すことになります。"あなたはそうではありません、それらは異なるオブジェクトです。 – tkausl

+0

'TelephoneDirectory [i] = DirectoryEntry(myfile);' - 一時的な 'DirectoryEntry'を構成します。それを配列要素に代入(コピー)します。一時的に破壊します。 –

答えて

2

の代わりに、私はコンストラクタを使用セッター関数を呼び出すと、私はオブジェクトの複数回のコンストラクタを呼び出しています。

いいえいいえあなたはコンストラクターを複数回呼び出すことはありません。あなたはその後、一時的な作成とobjectに割り当てるデフォルトのctorのを呼び出し、objectを作成

DirectoryEntry object; 
object = DirectoryEntry(myfile); 

:あなたのコードはかなり類似していると。 objectのctorの複数の呼び出しはありません。だから、あなたのコードは完全に有効です(ctorsと代入演算子が有効であると仮定します)。しかし、あなたが本当に欲しかったのは、ここで何が起こっているのか分からないからです。

+0

ありがとうございます。 私はそれを書いたときにはかなり確信していましたが、インストラクターは "なぜコンストラクタが複数回呼び出されても動作しないはずです"と言いました。 そして、私は混乱しました... – Goodfellow

+1

彼/彼女は言語の基礎を理解していないように見えます。 – Slava

+0

それは私にとって最大ではありません! 彼はコードを評価しているうちに私を混乱させようとしていたのでしょうか? – Goodfellow

関連する問題