#include <iostream>
using namespace std;
class foo
{
public:
string str;
foo() : str(1000000,'a')
{
}
~foo()
{
cout<<"Destructor invocado";
}
};
int main()
{
cout << "Presione para construir f";
cin.get();
foo* f = new foo;
cout << "Presione para destruir f";
cin.get();
delete f;
cout << "Presione para salir del programa";
cin.get();
}
¿Por qué la memoria no se libera al destruir el objeto foo? *_*
¿En base a que llegas a esa conclusion? Dudo que sea asi.
Cita de: Eternal Idol en 9 Agosto 2013, 15:11 PM
¿En base a que llegas a esa conclusion? Dudo que sea asi.
Mirando el consumo del programa en el administrador de tareas
No se cuales columnas estaras viendo pero si depuras y/o desensamblas el programa podras ve como no es correcta tu conclusion.
Por ejemplo dentro del destructor de foo y antes de salir se llama a:
call ILT+570(??1?$basic_stringDU?$char_traitsDstdV?$allocatorD
que a su vez salta a
ILT+570(??1?$basic_stringDU?$char_traitsDstdV?$allocatorD:
jmp std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> >
Si lo depuras podes ver como dentro del string el puntero a memoria que use (yo estoy en VC++ y es _Bx->_Ptr) deja de ser valido.
EDITO
Con 10mb tal vez lo veas mas claro:
foo() : str(10485760/*1000000*/,'a')
1) Espacio de trabajo: 2040KB Memoria: 520KB
2) Espacio de trabajo: 12312KB Memoria: 10784KB
3) Espacio de trabajo: 2048KB Memoria: 520KB