Logo

¡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.
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.