std :: map :: clear()の奇妙な振る舞いを観察しています。このメソッドは、呼び出されたときに要素のデストラクタを呼び出すことになっていますが、clear()を呼び出した後もメモリにアクセスできます。
例えば:
struct A
{
~A() { x = 0; }
int x;
};
int main( void )
{
std::map< int, A * > my_map;
A *a = new A();
a->x = 5;
my_map.insert( std::make_pair< int, *A >( 0, a ) );
// addresses will be the same, will print 5
std::cout << a << " " << my_map[0] << " " << my_map[0]->x << std::endl;
my_map.clear();
// will be 0
std::cout << a->x << std::endl;
return 0;
}
a
問題は、そのデストラクタがmap :: clear()によって呼び出された後でも、なぜ変数にアクセスできるのかということです。delete a;
呼び出し後に書き込む必要がありますか、それともmy_map.clear()
内容を上書きしても安全a
ですか?
よろしくお願いします、sneg