Re: Странный new
От: DontWorryAboutMyName  
Дата: 18.03.12 12:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Почему такая конструкция вообще разрешена?


А>
А>new тип_переменной;
А>


А>В результате использования данного выражения невозможно ни обратиться к выделенной в куче памяти, ни освободить её.


А>Я, конечно, понимаю, что такой код никто не напишет и что это далеко не единственное средство языка, которое вызывает подобное удивление, но всё же.


Вполне разумная конструкция в некоторых случаях.
template <typename Func>
class DelayedCall : private ITimer
{
public:
    DelayedCall( Func f, time_t delay ) : f( f ) { Timer::instance().subscribe( this, delay ); }
private:
    virtual void on_timer() { f(); delete this; }
    Func f;
};

...

void bar()
{
    printf( "delayed call\n" );
}

void foo()
{
    new DelayedCall( &bar, 10 );
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.