を継承しました。コードは正常にコンパイルされますが、実行するとクラッシュします。プロパティは公開されているので、継承された特性は私のためにいくつかのメモリを解放することができるでしょうか?の削除は、私は2つのクラスを持っているタイプ
答えて
それは私が、特に深刻なメモリリークを、それをコード化する方法にいくつかの問題が発生するので、私は、Aのコンストラクタ/デストラクタだけでなく、Bさんと呼ばれます。すべての助けをいただきありがとうございました、私はただのコンストラクタが継承されたことを私に伝える誰かのために混乱しました。
いくつかのコメント:「クラスA」のdtorが仮想であることを望んでいるでしょう。そして、コンストラクタが継承されないという事実は、例えば、 'class A'がintパラメータをとるコンストラクタA :: A(int x);を持っていれば、そのクラスBは* 'B 'で明示的に宣言されていない限り、そのようなコンストラクタを持ちます。 –
別の質問が良いかどうかは分かるはずです。
あなたのコードはクラッシュしていると言いますが、BのデストラクタでAのmmeber変数を削除しているという証拠はありません。実際に私が推測しなければならなかったのは、現金の原因がAとBのコピーコンストラクタと代入演算子の欠如(いわゆる「ルール3」、google it)であると言うでしょう。
プログラムがクラッシュしている場合は、クラッシュするコードを投稿することをお勧めします。私はそれが役に立つ答えを得るあなたのチャンスを向上させると思う。
彼はこの作業をする必要がないという仮想デストラクタを忘れないでください。 'A'のデストラクタは' virtual'なしで宣言されます。また、抽象クラスであるためには 'A'が必要なので、派生クラスでのみ使用できます(おそらく' A'が作成するものを破壊します)。 –
あなたの実際のコードに応じて、o
に削除を呼び出すことはできません、それは二重削除x
、y
、z
かもしれません。
基本クラス(基本クラスメンバの場合)と派生クラス(派生クラスメンバの場合)で破棄を正しく実装する必要があります。トリクルダウンのデストラクタ動作が基本クラスの破壊を処理するようにします。
http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.12
私は、派生クラスのデストラクタを書き、私は明示的に私の基本クラスのデストラクタを呼び出す必要がありますか?
- ません... 派生クラスのデストラクタは、(あなたが明示的に定義するかどうかは)自動的に、あなたのコードが使用されている方法に応じて、また、基本クラスのサブオブジェクトのデストラクタ
を呼び出しますデストラクタを仮想化する必要があるかもしれません。
http://www.parashift.com/c++-faq-lite/virtual-functions.html#faq-20.7
ときに私のデストラクタは仮想すべきですか?
- 誰かがベースクラスポインタを介して派生クラスオブジェクトを削除すると、誰かが削除されます。
- 1. 削除だけで、私は2つのテーブルを持って、IDS
- 2. 必須フィールドは、私は2つのクラスを持っている
- 3. @jsonbackreferenceは、私は2つのクラスを持っている関係
- 4. は、私は2つのクラスを持っている財産
- 5. のForeignKey、私は2つのクラスを持っているテンプレート
- 6. 私は2つのテーブルを持っている各クラス
- 7. C#が、私は2つのクラスを持っているIGrouping
- 8. 私は2つのインターフェイス持っている匿名クラスで
- 9. コンストラクタは、私は私のクラスでは2つのコンストラクタ持っているのpython
- 10. エラー、私は私のモデルに2つのクラスを持っている
- 11. は、私は2つのクラスを持っている多くの関係のAndroid
- 12. MySQLの:私は2つのテーブルを持って、各クラス
- 13. @qualifierは、私はこのような2つのクラスを持っている@Component
- 14. のObjectQueryは、子オブジェクトが、私は2つのクラスを持っている
- 15. は、私は2クラスを持っている別の
- 16. は、私は2つのテーブル持って
- 17. 円形C++ヘッダーは、私は2つのクラスを持っているプロジェクトで
- 18. 奇妙な行動は、私は2つのクラスを持っている
- 19. 私は2クラス持っ
- 20. 削除と私はJSONオブジェクトを持っているのMongoDB
- 21. MySQLの2つのテーブルは、私はテーブルを持っている
- 22. は、私は2つのリストを持っているのScala
- 23. は、私は2つのプロパティを持つのUIViewControllerを持っているiPhone
- 24. は、私は2つのクエリを持っている2つのクエリ
- 25. -カップルを解除し、私は2つのモデルを持っている
- 26. 私は2つのモデル持って
- 27. 私は2つのテーブル持ってeagerload
- 28. 私は2つのLINQ持ってLINQ
- 29. ソート私は2つのテキストファイル持って
- 30. は、私は2つのテーブルを持っている
Bのdtorの実行時に自動的に呼び出されるクラスAのデストラクタでそれらを削除してはいけませんか? –
また、ctorsとdtorsの実際のコードを投稿して、人々があなたがしようとしていることを推測する必要がないようにする必要があります。 –
デストラクタは継承されていますか?しかし、コンストラクタはありませんか? – Saustin