- スレを勃てるまでもないC/C++の質問はここで 23 [転載禁止]©2ch.net
46 :デフォルトの名無しさん[sage]:2015/02/03(火) 04:38:48.15 ID:GMpj9RJ2 - 誘導されてきました。
質問です。 抽象クラス(親クラスとする)を継承した派生クラス(子クラスとする)を 親クラスの型のメンバー変数に子クラス型でnew()し、抽象化して保持してます。 このメンバーをdelete してすぐNULLを代入しても、参照が残ってるみたいで エラーがでる場合があります。 抽象化しているオブジェクトの削除の、お作法みたいなものってありますでしょうか。
|
- スレを勃てるまでもないC/C++の質問はここで 23 [転載禁止]©2ch.net
49 :デフォルトの名無しさん[sage]:2015/02/03(火) 05:24:28.94 ID:GMpj9RJ2 - >>47
deleteしたはずの親クラスに定義している純粋仮想関数への アクセスをしているようで、アクセス違反でメモリリークを起こしています。 自分なりに調べて、親クラスのデストラクタをVirtualにするなど今試みていましたが、 だめでした。 http://shnya.jp/moin/C++%E3%81%AE%E8%90%BD%E3%81%A8%E3%81%97%E7%A9%B4#A.2BfRR8i07uYPOVomVwMG5.2FYA- こちらのサイトの 純粋仮想関数の罠 の項の しかし……私は嘘をつきました。抽象クラスのインスタンスを構築することはできるのです。 継承された具体クラスを構築している時に、一瞬ですが基底クラスは存在します。 継承されたクラスのコンストラクタが呼ばれる前に、純粋仮想関数が呼ばれた場合、プログラムは不正終了します。 が原因に近しいのはないかと踏んでいますが、具体的な対策が見出せません。 というのが恐らく一番近い原
|
- スレを勃てるまでもないC/C++の質問はここで 23 [転載禁止]©2ch.net
50 :デフォルトの名無しさん[sage]:2015/02/03(火) 07:10:28.26 ID:GMpj9RJ2 - 自己解決しました。
親クラスのコンストラクタかデストラクタが呼ばれるタイミングで 仮想関数が呼ばれていると pure virtual method called になるようで、 純粋にその場面では仮想関数を呼ばないように工夫することで解決しました。 >>47さん、お付き合い頂きましてありがとうございました。
|