Masahiro Sakai
-
2012-03-06T05:35:28+0000
- 更新日時:
2012-03-06T05:35:28+0000
C++は常用してないけど、こういう話は面白い。
「C++ではコンストラクタ/デストラクタの中から仮想関数を呼んでも、導出クラスで再定義された関数には飛んでこない」というのは昔やらかしてしまったことがある気がする。
株式会社エス・スリー・フォー » sizeofの不思議
共有中: 一般公開
+1 したユーザー:
Kazu ne
Shiro Kawai
-
2012-03-06T08:15:55+0000
この仕様は、ベースクラスのctor実行中には導出クラスの初期化が完全に済んでないから導出クラスの仮想関数を安全に呼ぶことができない、から?
CLOSだとinitialize-instanceの最中も平気で導出クラスのメソッドが呼べて、初期化されてるかどうかは自己責任でね、ってなってる。思想の違いかな。
Masahiro Sakai
-
2012-03-09T03:59:25+0000
なるほどー。確かに理由はそうっぽいですね。
たしか、C#やJavaでも平気で導出クラスの仮想関数を呼べたと思うので、C++は少数派でしょうか。
lyrical logical
-
2012-03-14T03:36:44+0000
滅茶苦茶反応遅くなりましたが、Java や C# と違って C++ のメンバ変数は zero-initialize されないとかの事情の違いがありますね
Masahiro Sakai
-
2012-03-16T00:08:56+0000
なるほど〜 たしかに。
CLOSだとinitialize-instanceの最中も平気で導出クラスのメソッドが呼べて、初期化されてるかどうかは自己責任でね、ってなってる。思想の違いかな。
たしか、C#やJavaでも平気で導出クラスの仮想関数を呼べたと思うので、C++は少数派でしょうか。