ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
nanashino さんが書きました:実行すると恐らくcoutのところでエラーが出るかと思います。
初期化していないm_pNumをデリファレンスしているので、A() { *m_pNum = 5; }のところでアクセス違反になる可能性があります。
ここを実行してアクセス違反にならなければ、m_pNumに偶然値を書き込める領域へのポインタが入っていたということなので、
読めるのに書けないというのは通常使われても、書けるのに読めないというのは通常使われないと思われるので、同じ領域を読んでいるcoutでもエラーは出ないと予想できます。
もしくは最適化でポインタのアクセスが消える場合は…どうなるかわかりません。
(実際に実験を行った所、デバッガ上で実行するとアクセス違反になるのに、直接実行するとアクセス違反にならずに5が表示されました。
危険なので実験以外でこのようなコードを書いてはいけません。)
nanashino さんが書きました:deleteしたクラスが持っていたポインタを参照しようとしているので当然のことなのですが、
クラスをdeleteしても、m_pNumをデリファレンスする前にちゃんと有効な領域へのポインタを代入しており、かつその領域を開放していなければ、安全なはずです。
nanashino さんが書きました:deleteした後、Num変数は何を持っているのかを知りたいです。
deleteしても(デストラクタで変なことをしなければ)クラスの外には影響がないはずなので、もし実行されればdeleteする前と変わらずm_pNumに入っているゴミが入ったままである可能性が高いでしょう。