El código folowing muestra que no se espera una salida:¿STL Vector llama a un destructor de un objeto no asignado?
class test
{
public:
test()
{
std::cout << "Created" << (long)this << std::endl;
}
~test()
{
std::cout << "Destroyed" << (long)this << std::endl;
}
};
int main(int argc, char** argv)
{
std::vector<test> v;
test t;
v.push_back(t);
return EXIT_SUCCESS;
}
Cuando ejecuta muestra:
Created-1077942161
Destroyed-1077942161
Destroyed674242816
creo que la segunda salida "Destroyed" no debería estar allí. Cuando no uso el vector, el resultado es una línea Creada y otra Destruida como se esperaba. ¿Es este comportamiento normal?
(Esto se compila con GCC en un sistema FreeBSD)
+1 para [SSCCE] (http://sscce.org/) – Flexo
Para imprimir punteros es mejor lanzar al puntero void: 'std :: cout << (void *) this << std :: endl ; '. –
También devolver 'EXIT_SUCCESS' es opcional. Puede omitir el valor de retorno en 'main', devolverá' 0' (que se convertirá en el número que signifique "terminación normal" para su plataforma) –