Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Sobrecarga De New[]

Iniciado por Zaelsius, 02 de Febrero de 2004, 08:37:15 PM

« anterior - próximo »

Zaelsius

 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






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.