melpon日記 - HaskellもC++もまともに扱えないへたれのページ

2010-03-08 このエントリーを含むブックマーク

turuginaturugina 2010/03/08 11:26 B::mutate()の中身は、
new (this) D2; してる時点で
D1オブジェクトとしてのthisのlifetimeは終了してて
その下の f(); がもう無効になってる D1::f() の呼び出しなので
ダメだよー
って言ってるんじゃないですかね。

melponmelpon 2010/03/08 13:36 D2 オブジェクトのライフタイムが始まってるから f() 呼び出しは D2::f() が呼び出されそうな気がしたんですけど、もしかして this はあくまで D1 をポイントしているだけで、D2 に対するポインタを持っていないからダメなんですかね?
void B::mutate() {
 D2* p = new (this) D2;
 p->f(); // これなら OK ?
}