これは本当に正当なものではない、またはメンバーオブジェクトが別のインスタンスで置き換えられている未定義の動作を含むと感じています。私はここStackOverflowとGoogleでかなり長い間検索し、主にdelete this;
に行きたいと思っていた人々を見つけました。もし私がnew
私のインスタンスと私はdelete
それをしなかったので、delete this;
質問が同じ状況のものであるかどうかは完全にはわかりません。オブジェクトは自分自身を置き換えることは法的ですか?
私は正しいですか?
このようなことをするためのコードがまだ必要な場合は、簡単な方法がありますか?
struct Test;
struct Member {
void fail();
Test* test;
};
struct Test {
Test(): member() {
member.test = this;
}
void doStuff() {
member.fail();
}
Member member;
};
void Member::fail() {
test->member = Member(); // delete the object the current code is executing on
}
int main() {
Test bla;
bla.doStuff();
}
投稿したコードに違法はありません。 – NathanOliver
@krzaq私はインスタンスを 'new'しなかったので、同じ状況であるかどうかは完全にはわかりません。インスタンスを削除しないでください。 – risingDarkness
@k rzaq:_ "どちらの場合も、そのオブジェクトのメンバ関数の途中で終了します。" _あなたはどちらの場合も誤ってピックします "。オブジェクトに割り当てることは、オブジェクトの存続期間にまったく影響しません。 –