オブジェクトは標準のC++コンテナから自身を消去できますか?
#include <iostream>
#include <map>
struct foo
{
void kill(std::map<int, foo>& m, int i)
{
m.erase(i);
}
};
int main()
{
std::map<int, foo> m;
m.emplace(1, foo());
std::cout << m.size() << std::endl;
m[1].kill(m, 1);
std::cout << m.size() << std::endl;
}
は(G ++)を警告なしでコンパイル次のコードは、エラーなしで実行され、出力によって判定kill
方法は、マップからfoo
オブジェクトを消去します。しかし、これは実際には未定義の動作かもしれないと私は感じている。 kill
メソッドの後に、m.erase(i)
this
は、もはや有効なオブジェクトを指していないようです。
これについてC++標準では何と言いますか?
はいできます。 http://stackoverflow.com/questions/862093/object-delete-itself-from-container – Auriga
['delete this;']と基本的に同じ原則(http://stackoverflow.com/q/3150942/2069064) – Barry