Pourquoi la mémoire est toujours accessible après std::map::clear() est appelée?

J'observe un comportement étrange de std::map::clear(). Cette méthode est censée appeler l'élément destructeur lorsqu'il est appelé, cependant le souvenir est encore accessible après l'appel à clear().

Par exemple:

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

La question est, pourquoi est variable a toujours accessible après son destructeur est appelé par carte::clear()? Dois-je écrire delete a; après l'appel de my_map.clear() ou est-il sûr d'écraser le contenu de a?

Merci d'avance pour votre aide,
sneg

  • Essayez d'utiliser à() pour y accéder ne vous permettront pas d'accéder à quelque chose qui n'existe pas pour l'exemple: ideone.com/ZeRTnd (si l'élément avec la touche "B" a été défini avant, après la carte.clear() pour accéder à la touche "B" vous permet de vous 'std::out_of_range' exception
InformationsquelleAutor sneg | 2009-02-20