перегрузка оператора new\delete

bigbill

допустим, что есть код
void* operator new( size_t size, string st)
{
     void* ptr = malloc( size);
     cout<<st<<endl;
     return ptr
}
void operator delete( void * ptr)
{
     free(ptr);
     cout<< ;
}
int main
{
     int* ptr = new( int, " vvv");
     delete(p);
     return 0;
}
прога не компилится, в чем прблема? вроде правильно new и delete перегружаю
пробовала статик каст добавить - все равно не работает

Dimon89

Ошибку компилятора в студию. И на всякий случай:
Рекомендуется не производить в операторе new (особенно в глобальном) какие-либо операции с объектами, которые могут вызвать оператор new. Например, для вывода текста используется функция printf, а не объект std::cout.
PS Имхо, если у тебя возникают такие вопросы, тебе совершенно точно не надо перегружать эти операторы.

Maurog

допустим, что есть код
начни с примеров, которые есть в гугле
у тебя каша какая-то и в коде и в голове

apl13

cout<< ;
прога не компилится, в чем прблема? вроде правильно
Действительно!

Maurog

Действительно!
а можно еще и статик каст навесить

static_cast<>(cout)<< ;

:grin:

apl13

static_cat<(^_^)>(cout)<_<';

bigbill

нет, там после сиаут бала строка, в лом было эту строку печатать, а статик каст там был был перед нью в main

agent007new

Нахуа это нужно? Тогда уж как-нить так - хотя в инете легко погуглить было
 
void* operator new(size_t size, string st)
{
void* ptr = malloc( size);
cout<<st<<endl;
return ptr;
}

void operator delete(void * ptr) throw
{
free(ptr);
cout<< "fuck" << endl;
}
int main
{
int* ptr = new (string(" vvv" int;
delete ptr;
return 0;
}

Обрати внимание на вызов new (параметры передаются до типа, при этом я завернул в string строку, а то там перегрузка на плейсмент нью пойдет, а не на твой): int* ptr = new (string(" vvv" int;
а не int* ptr = new( int, " vvv");

bigbill

спс огромное
Оставить комментарий
Имя или ник:
Комментарий: