ページ 11

deleteとデストラクタの動きについて

Posted: 2009年3月22日(日) 16:06
by 山崎
毎度お世話になっております、山崎です。
タイトルがわかりにくくて申し訳ありませんが、
今回はdelete演算子を使ったときのデストラクタの動きについてお伺いに参りました。
エディタはVCC2008を使っております。

今回お伺いしたいことを抽象的に表すと、このような感じです。

あるクラスAを継承した子クラスA'があります。
A型のポインタaを宣言し、そのポインタaにA'型のインスタンスをnewで作成します。
この後aをdeleteしA'型のインスタンスを解放したとき、
A'のデストラクタがどうしても呼ばれなくて悩んでいるんですが、
もしかしてそういうものなのでしょうか?
Aのデストラクタは呼ばれているようです。

Re:deleteとデストラクタの動きについて

Posted: 2009年3月22日(日) 16:22
by Justy
 多分基底クラス Aのデストラクタが virtualになっていないのが原因かと。


基底クラスには仮想デストラクタをもたせよう 14項 - ひげぽん OSとか作っちゃうかMona-
ttp://d.hatena.ne.jp/higepon/20051110/1131597177

6章:継承
ttp://www5c.biglobe.ne.jp/~ecb/cpp/06_09.html

Re:deleteとデストラクタの動きについて

Posted: 2009年3月22日(日) 16:27
by box
> タイトルがわかりにくくて申し訳ありません

そうお感じになっているのでしたら、
わかりやすいタイトルをお考えになってみては
いかがでしょうか。

> 今回お伺いしたいことを抽象的に表すと、このような感じです。

抽象的にお書きになるよりも、
お聞きになりたい点を具体的に示される方が
回答が付きやすいと思います。
例えば、お書きになったソースコードを提示する、
というような方法があります。

Re:deleteとデストラクタの動きについて

Posted: 2009年3月22日(日) 16:46
by 山崎
Justyさん
ご返信誠にありがとうございます。
デストラクタにvertualをつけたところ、一発で問題が解決してしまいました。
こんな基本的なことを知らなかったとは、お恥ずかしい限りです。

boxさん
タイトルにつきましては
一体どのようにすればわかりやすくて簡潔かと5分程度悩みましたが、
私のプログラミングの経験ではなかなか簡潔にまとめることができず、
ごちゃごちゃして長いタイトルにするよりはと短くさせていただきました。
コードを提示することも考えたのですが、問題の箇所は複数のファイルにまたがっており
他にもいろんなクラスとかが絡んでいたため、
そのままコードを貼り付けるのでは読むほうも大変なのではと考え抽象的に示しました。

私まだまだプログラミングの経験が浅いためこのような間違いもするかとは思いますが、
どうかそこは優しくご指導していただきたいと思います。
何も考えずテキトーに記事を立てているわけではなく
素人なりにより良い記事にするようにしていることを、どうかご理解頂けたらと思います。