Warum ist der Speicher noch zugänglich, nachdem std :: map :: clear () aufgerufen wurde?

Beobachten ich seltsame Verhalten von std::map::clear(). Diese Methode nennen soll element der Destruktor aufgerufen, aber Speicher ist immer noch zugänglich, nach dem Aufruf von clear().

Beispiel:

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;
}

Die Frage ist, warum ist variabel a noch zugänglich, nachdem der Destruktor aufgerufen wurde, die von map::clear()? Brauche ich zu schreiben delete a; nach dem Aufruf my_map.clear() oder ist es sicher, überschreiben Sie den Inhalt a?

Vielen Dank im Voraus für Eure Hilfe,
sneg

InformationsquelleAutor der Frage sneg | 2009-02-20

Schreibe einen Kommentar