Единственное, чего я не понимаю, так это области применения такого типа. Выглядит он уж очень узкофункциональным.
...
Всё верно.
Моё личное убеждение - шаблонные классы могут применяться только как узкофункциональные объекты...
Естественно я показал не все методы класса. Там ещё оператор присваивания указателю на тип есть.
А применяется, например, в функциях в которых вызывающая сторона или предоставляет буфер или нет.
Например в потокобезопасной функции преобразования числа в строку..
char_a StrFromLongA( long val, char* buf, long radix) throw ( ELowResources*, ESystemError*)
{
char_a res ((const char*) buf);
if ( buf == NULL)
res = StrAllocA( STRDEF_CCH_FOR_LONG);
Str32ToA((unsigned long) val, res, radix, ( radix == 10) && ( val < 0));
return res;
}
Я нисколько не призываю всех делать также. Просто вдруг понял что есть вот такой "side effect"
без использования макросов и ни хотел бы случайно где нибудь допустить утечки.
Решил спросить - не знает ли кто как это сделать?
template <typename _T, AutoReleaseMode arm = armMemFree, bool bConst=true>
м ?
Не, так наверное не пойдет. Думаю возникнет та же коллизия но уже при инстацировании..
Да и вообще это уже слишком сложно для меня
Я лучше тогда заменю такой класс на класс
без шаблонов
.