Я наблюдаю странное поведение 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
?
Заранее благодарим за помощь, снег