He estado trasteando con la sobrecarga de los operadores new,delete, new[] y delete[]. Tengo este código:
#include <memory>
#include <iostream.h>
class Cipote
{
public:
char* pBasura;
char* pBasura2;
Cipote()
: pBasura(0),pBasura2(0)
{
pBasura = new char[5];
pBasura2 = (char*)Cipote::operator new[](sizeof(char)*10);
};
~Cipote()
{
delete[] pBasura;
Cipote::operator delete[](pBasura2);
};
void* operator new[](size_t size)
{
cout << (unsigned int)size << " bytes reservados\n";
return malloc(size);
};
void operator delete[](void* p)
{
free(p);
};
};
int _tmain(int argc, _TCHAR* argv[])
{
Cipote* pCipote = new Cipote;
delete pCipote;
cin.get();
return 0;
}
La salida de ese programa es:
"10 bytes reservados"
En el caso de new[] y delete[] , sólo se usa el operador sobrecargado cuando se especifica explícitamente. Esto no me mola nada, porque con new y delete no ocurre(se llaman las versiones sobrecargadas si existen). Si probais a poner un breakpoint en new[] vereis como sólo se llama la segunda vez.
Me ha parecido leer que este es el comportamiento correcto del compilador, pero me parece una putada... ¿alguien me lo podria confirmar o desmentir?
PD: Uso VC 7