ポリモーフィズムの考え方と配列を扱う時の意識の違い

以下のコードを実行した時に出力される値は?

■以下(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分も
かかってしまった。

わかればなるほど。となるが、大量のコードに紛れ込んでいた場合
でも見つけられるよう精進したいと思った。