Я столкнулся со странной ошибкой, связанной с классом шаблона в C ++.Коды работают нормально большую часть времени, но в одном случае это не удалось.Ниже приведены упрощенные коды:
template <class T>
class Class1
{
...
T *func();
...
};
// ---------------------------------------------------------------
template <class T>
T *Class1<T>::func(...)
{
...
string name = typeid(T).name();
T *ptr = a_queue.front(); // a_queue is of type "queue<T *>"
ptr->some_func(); // failed
...
}
// ---------------------------------------------------------------
Class1<Class2> class1;
class1.func();
Предположим, Class1
специализируется с T
, равным Class2
и Class3
соответственно.В Class1<Class2>::func
, ptr
объявляется как указатель Class3
в этом случае!Таким образом, тип не является безопасным в классе шаблона?
Есть идеи?Спасибо!
Редактировать:
Я добавил string name = typeid(T).name()
, тогда T
будет правильного типа (Class2
), но при вызове функции-члена some_func
из Class2
, есть ошибка:
cannot access memory address at 0x10
[решено] Окончательное редактирование 2011/11/09:
Я обнаружил проблему, это не таксвязан с классом шаблона, но вызван удалением неправильного указателя, который не обновляется в той же функции с delete
и был помещен в очередь!