C++ трюк с шаблоном
Модератор: Модераторы разделов
-
_Tarik_
- Сообщения: 22
- ОС: Gentoo linux
C++ трюк с шаблоном
Имеется шаблонный класс-контейнер, тип элементов которого задаётся в шаблоне, при удалении объекта этого класса хотелось бы реализовать в деструкторе удаление элементов если это указатели. Т.е. проблема в том, что надо в зависимости от типа вызывать delete или нет. Кроме макросов ни чего в голову не лезет, но что-то подсказывает, что можно такое осуществить через шаблоны..
-
Sceptik
- Сообщения: 84
- ОС: Debian
Re: C++ трюк с шаблоном
_Tarik_
частичная специализация шаблона?
частичная специализация шаблона?
Мы должны построить мирное и свободное общество, где уважают права и свободы, где нет угнетённых, обиженных и несправедливо обделённых, где нет места ненависти и крови... построить его любой ценой.
-
_Tarik_
- Сообщения: 22
- ОС: Gentoo linux
Re: C++ трюк с шаблоном
Уже помогли на другом форуме.. Как всегда всё оказалось просто и изящно
. Просто делается две функции с шаблоном:
Код: Выделить всё
template<class T>
void cleanup(T value)
{}
template<class T>
void cleanup(T* value)
{
delete value;
}-
oav
- Бывший модератор
- Сообщения: 296
Re: C++ трюк с шаблоном
_Tarik_ писал(а): ↑15.02.2007 19:59Имеется шаблонный класс-контейнер, тип элементов которого задаётся в шаблоне, при удалении объекта этого класса хотелось бы реализовать в деструкторе удаление элементов если это указатели. Т.е. проблема в том, что надо в зависимости от типа вызывать delete или нет. Кроме макросов ни чего в голову не лезет, но что-то подсказывает, что можно такое осуществить через шаблоны..
Я бы сделал более гибко, чем тебе предложили выше, т.к. завтра легко могут появиться новые требования:
завел второй параметр шаблона - политика удаления. Реализовал бы несколько политик. Политики по-умолчанию - выбор через type_traits конкретной реализации политики, для указателей - одна, если не указатель - другая. В другом месте кода можно просто явно указать политику забив на автоматический выбор.
зы. если надо вырьировать только удаление - то можно еще о smart pointers подумать, если не мешает накладные расходы на распоковку/упаковку самих элементов.
-
_Tarik_
- Сообщения: 22
- ОС: Gentoo linux
Re: C++ трюк с шаблоном
oav, я не использую boost, потому type_traits мне не подойдёт, а это в самый раз..
-
oav
- Бывший модератор
- Сообщения: 296
Re: C++ трюк с шаблоном
type_traits для поинторов/непоинторов сделать - строчек 15 кода. Зато в будущем такое решение будет легко масштабироваться.
Все есессно имхо - вариант с перегруженной функцией вполне валидный.
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: C++ трюк с шаблоном
Я может крамольную мысль выскажу, но указатели удалять нельзя
Ими надо управлять через smart pointers, как впрочем и другими ресурсами. Тогда этой проблемы не будет by design. А то потом замучаешься понимать, почему оно память портит. А оно оказывается пытается указатель на статический объект удалять 
-
oav
- Бывший модератор
- Сообщения: 296
Re: C++ трюк с шаблоном
v04bvs писал(а): ↑16.02.2007 11:43Я может крамольную мысль выскажу, но указатели удалять нельзяИми надо управлять через smart pointers, как впрочем и другими ресурсами. Тогда этой проблемы не будет by design. А то потом замучаешься понимать, почему оно память портит. А оно оказывается пытается указатель на статический объект удалять
Смотри выше ;-)
-
Женя Подсыпальников
- Сообщения: 482
Re: C++ трюк с шаблоном
Совет с кодом - интересный:
- с одной стороны,
чтобы вызвать вторую функцию -
надобно передать адрес переменной типа Т
(и удалится совсем не указатель, а адрес на него...)
- с другой стороны,
если я знаю что мне нужна вторая функция,
то нет и задачи
Разные или параметрированные шаблоны
(ведь и указатели могут быть не моими) -
сдаётся мне, более спокойное решение...
- с одной стороны,
чтобы вызвать вторую функцию -
надобно передать адрес переменной типа Т
(и удалится совсем не указатель, а адрес на него...)
- с другой стороны,
если я знаю что мне нужна вторая функция,
то нет и задачи
Разные или параметрированные шаблоны
(ведь и указатели могут быть не моими) -
сдаётся мне, более спокойное решение...
Пойдём на рыбалку !