Здравствуйте, Аноним, Вы писали:
А>Почему такая конструкция вообще разрешена?
А>А>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 );
}