Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Zaelsius en 02 de Febrero de 2004, 08:37:15 PM

Título: Sobrecarga De New[]
Publicado por: Zaelsius en 02 de Febrero de 2004, 08:37:15 PM
 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