トップページ > プログラム > 2015年02月03日 > GMpj9RJ2

書き込み順位&時間帯一覧

18 位/177 ID中時間01234567891011121314151617181920212223Total
書き込み数0000110100000000000000003



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
スレを勃てるまでもないC/C++の質問はここで 23 [転載禁止]©2ch.net

書き込みレス一覧

スレを勃てるまでもない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さん、お付き合い頂きましてありがとうございました。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。