掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
デストラクタを仮想関数にしたとき動き(2) (ID:68529)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
tetrapod さん、ありがとうございます。 > 理由を知ってどうするのか非常に微妙。単に自己満足したいってこと? その理由によって、修正したり、しなかったり。自己満足で終わるかも知れません。 > 「デストラクタが virtual でないクラスは、そのクラスの作者が派生禁止という意思表示をし ている」 > ということだと解釈しなきゃならない (Effective C++) > 派生禁止であると意思表明しているクラスから強引に派生クラスを作ることはできる > ただし、そんなことしても動作保証がない。ということで。 「Effective C++ で禁止されている」=「動作保証がない」とは思ってないです。 もちろん新しく書くソースで準拠するのは何の問題もありませんが、 既に存在してるをソースをこれを理由に治すのは躊躇しますね。 他人のソースだし、私自身この本読んだの97年だし、それ以前にもソースは存在してるし。。 yoh2さん、ありがとうございます。 おかげで、すっきりしました。 1.2.3. の流れで、確かにBに仮想関数がないときはずれません。 デストラクタに限らずBに仮想関数があるとずれます。 そしてBに仮想関数があってもAに仮想関数があればずれません。 なるほど、、、ようするに、キャスト時の問題ですね。 A* b = new(B); void* p1 = b; void* p2 = (B*)b; ここで p1 == p2 の場合と p1 =! p2 になる場合があるのは当然で、 その差異から生じる問題ですね。極ありふれた問題でした。 > その理由を詮索するのは無意味。 これ以上詮索する必要はありませんが、ただ私の中ではここまで至ってなかったもので。。 この時点で「解決」とさせて頂きます。 Banさん、ありがとうございます。 > 動作保証上の話で言えば「言語仕様として保証のないコードを書いた結果、落ちる」で 概ね終了だと思いますし。 そうなんでしょうが、終了しなくてよかったです。 仲澤さん、ありがとうございます。 そういう意図はありませんでした。文章が下手ですみません。 結局はεπιστημηさんが最初にご回答して下さったことに他ならないわけで、 理解力が低くて申し訳ないです。他の人にも余計な回答をさせてしまって。。。 皆様ありがとうございました。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.