掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
メモリ破壊について (ID:68468)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
uninitialized/NULL なポインタで virtual が呼べないのは当然なんだけど non-virtual なら [コンパイラの実装上、呼べない理由が無い] ので 「呼び出すだけ」なら呼べるだろうね A* a; があるとき a->non_virtual_memfunc(arg1, arg2); を、コンパイラは non_virtual_mem_func_of_class_A(a, arg1, arg2); のように翻訳するんで。 non_virtual_memfunc() の中でメンバー変数に触ったりすると即死だけど。 # メンバー変数に一切触らないのであれば static メンバー関数にすればいい # こっちなら言語規格書上の動作保証があるわけで NULL なポインタに対して non-virtual な呼び出しを行う例だったら MFC にあったりするんだな CWnd::GetSafeHwnd() なんかがそう 言語規格書が保証してないところを Microsoft が保証している例だったりする # uninitialized なポインタに対して CWnd::GetSafeHwnd() を呼ぶと死ぬけどさ
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.