Как удалить объект, созданный с помощью оператора размещения new?

char * buf = new char[sizeof(T)];
new (buf) T;
T * t = (T *)buf;
//code...
//here I should destruct *t but as it is argument of template and can be
//instantiated via basic types as well (say int) so such code 
/*t->~T();*/
//is incorrect (maybe correct? Strange, but it works on VS 2005 for basic types.)
//and this code 
/*delete t;*/ 
//crashes the program.
delete [] buf;

Итак, каков правильный способ уничтожить t ?

P.S. Приведенный выше код предназначен только для описания моей проблемы и не имеет реального отношения к коду, который я собираюсь написать. Поэтому, пожалуйста, не давайте ответов типа (Зачем использовать размещение новое вместо не-размещения? Или что-то подобное)

19
задан Ziezi 14 June 2017 в 09:23
поделиться