仮想関数テーブルポインタはいつコピーされるのか

Base* b1 = NULL; // 仮想関数を定義したクラス
char mem[255] = "";
b1 = (Base*)mem; // ①これはダメ
b1 = (Base*)malloc(sizeof(Base)); // ②これもダメ
b1 = new Base(); // ③これはOK

デバッガで追うとoperator new()の後のコンストラクタで

mov dword ptr [eax],offset Base::`vftable'

をしているようだ。というかコンパイラはnewしないとコンストラクタを呼ばない。