У меня есть шаблон
template <class T>
class A
{
T* t_;
A(){t_ = new T();}
void SetItem(T& t)
{
t_ = t;
}
};
В этом классе шаблонов есть 2 случая
1. A<T> a;
2. A<T*> b;
Если я призываю два раза SetItem
, т.е.
a.SetItem(T());
a.SetItem(T());
память будет очищена правильно?
То же самое, если я призываю так:
b.SetItem(new T());
b.SetItem(new T());
Я знаю, что память не будет очищена.
Вопросы:
- Как сделать ограничение на шаблон, чтобы он занимал только
T
или T*
?
- Если я использую шаблон
A<T*>
, как предотвратить утечки. Должен ли я изменить класс или позаботиться об этом снаружи?
- Есть ли способ заставить эту работу работать, когда я использую
A<T>
или A<T*>
?
Я думаю, что использование интеллектуальных указателей или автоматических указателей является опцией. Но я точно не знаю.