void* が参照するオブジェクトのdelete – プログラミング – Home

void* が参照するオブジェクトのd...
 
通知
すべてクリア

[解決済] void* が参照するオブジェクトのdelete


パズ
 パズ
(@パズ)
ゲスト
結合: 23年前
投稿: 14
Topic starter  

初歩的な質問ですみません。
次のように void* 型のポインタに自前のクラスを new でくっつけた場合、
delete を実行するときにキャストしないとデストラクタがよばれません。

class myCls{

~myCls(){}
};
int main(){
void* p = new myCls;

delete p; // これではデストラクタ呼ばれない
// delete (myCls *)p; // こっちはデストラクタ呼ばれる
}

このようなケースではキャストしないとまずいようですが、
言語仕様でそのようになっているのでしょうか?


引用未解決
トピックタグ
REE
 REE
(@REE)
ゲスト
結合: 23年前
投稿: 240
 

はい
void *のままでは、コンパイラは、deleteでどのクラスのデストラクタを呼べばいいのか
分かりません。
さらにクラスでない場合もあります。


返信引用
茶々
 茶々
(@茶々)
ゲスト
結合: 19年前
投稿: 10
 

さらに、newした型と違ったりすると
メモリリークする事もあるし。


返信引用
パズ
 パズ
(@パズ)
ゲスト
結合: 23年前
投稿: 14
Topic starter  

REEさん、茶々さん、ご返答ありがとうございます。
もやもやが解消しました。

ありがとうございました。


返信引用
パズ
 パズ
(@パズ)
ゲスト
結合: 23年前
投稿: 14
Topic starter  

REEさん、茶々さん、ご返答ありがとうございます。
もやもやが解消しました。

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました