通知
すべてクリア
Topic starter
2005年12月16日 1:32 PM
初歩的な質問ですみません。
次のように void* 型のポインタに自前のクラスを new でくっつけた場合、
delete を実行するときにキャストしないとデストラクタがよばれません。
class myCls{
…
~myCls(){}
};
int main(){
void* p = new myCls;
…
delete p; // これではデストラクタ呼ばれない
// delete (myCls *)p; // こっちはデストラクタ呼ばれる
}
このようなケースではキャストしないとまずいようですが、
言語仕様でそのようになっているのでしょうか?
2005年12月16日 2:07 PM
はい
void *のままでは、コンパイラは、deleteでどのクラスのデストラクタを呼べばいいのか
分かりません。
さらにクラスでない場合もあります。
2005年12月16日 6:55 PM
さらに、newした型と違ったりすると
メモリリークする事もあるし。
Topic starter
2005年12月16日 8:36 PM
REEさん、茶々さん、ご返答ありがとうございます。
もやもやが解消しました。
ありがとうございました。
Topic starter
2005年12月16日 8:36 PM
REEさん、茶々さん、ご返答ありがとうございます。
もやもやが解消しました。
ありがとうございました。