新しいクラスのインスタンスを複数作成する場合、各インスタンスのデストラクタを呼び出す必要がありますか、それとも一度呼び出すとインスタンスが破棄されますか(あいまいな/間違った用語を使用している場合はコンストラクタ/デストラクタは私はまだ完全に把握していない概念)。新しいクラスの各インスタンスを破棄する必要はありますか?
具体的には、これは私が協力しているコードです(スタイルが悪い場合は謝罪しなければなりません。私は学校の問題のアイディアを持っていて、コードをすぐに取りたいと思っていました)。
while(read >> f >> l >> t >> s >> sta >> acct >> bal)
{
cout << "test" << endl;
ptr[i] = new account(f,l,t,s,sta,acct,bal);
ptr[i]->printcontents();
cout << "test" << endl;
i++;
cout << i << endl;
}
質問のために、これは3回繰り返されると仮定します。新しいアカウントの3つのインスタンスをすべて破棄するには、「アカウント」のデストラクタを一度呼び出す必要がありますか?これは良い練習ですか?
編集:自分の投稿の一部が途切れてしまったことに気がついたので、最後の数行を追加しましたが、すでに人々はその問題に対処しています。割り当てが私に指示するので、私がユーザーポインタである理由は純粋です。非常に率直に言って、私はこの時点でそれらを使用する際のポイントが見当たらないのですが、私は彼らが役に立つようになったところをどこかに仮定しています。私はまた、動的メモリ割り当ても割り当てに使用されることを追加する必要があります。
使用スマートポインタ(すなわち 'shared_ptr' /' make_shared'または 'unique_ptr' /' make_unique')を閉じるようにデストラクタを呼び出して、あなたの 'の削除については気にしないでください必要新しい 'sインスタンス。 –
いつも通り:すべての 'new'はちょうど1つの' delete'と 'new []'のちょうど1つの 'delete []'を必要とします。しかし、基本的には、newとnewを必要とすることはまずありません。 –
本当の質問は、あなたがポインタを使って始めている理由です。 Javaから来たのですか?すべてのオブジェクトが 'new'で作成されていますか?あなたの 'account'オブジェクトの配列は実際の' account'オブジェクト*を格納することができます。 –