ポリモーフィズムの考え方と配列を扱う時の意識の違い
以下のコードを実行した時に出力される値は?
■以下(VS2010でコンパイル可能なコードを記載)
#include <iostream> using namespace std; class A { public: int a; A():a(0){} virtual ~A(){cout << "~A" << a << endl;} }; class B : public A { public: int b; B():b(0){} ~B(){cout << "~B" << b << endl;} }; void main() { A* temp = new B[2]; ((B*)&temp[1])->b = 10; ((B*)&temp[0])->b = 10; delete [] temp; }
このコードを出力結果を言い当て、意図した動作にならない事を
指摘出来て、かつ問題の理由を即答えられる人がいるのだろうか。
私は実際コードを打ち込み、何が問題かを判断するのに2、3分も
かかってしまった。
わかればなるほど。となるが、大量のコードに紛れ込んでいた場合
でも見つけられるよう精進したいと思った。