我正在寻找一种方法来确定模板在编译时是否是指针。因为当T不是指针时,程序将无法编译,因为您无法删除普通类型变量。
template <typename T>
void delete(T &aVar)
{
// if T is a point
delete aVar;
aVar = 0;
// if T is not a point, do nothing
}
基本上,我正在学习自己创建链接列表(不使用STL列表)。我尝试在列表中使用模板,因此它可以采用任何类型。当类型是指针时,我想通过析构函数自动删除它(关键字delete)。
问题是,如上所述,当我使用int而不是列表中某个类的某个指针时,VC2010将无法编译,因为您无法删除无指针变量。所以我正在寻找一种方法,比如宏,当根据模板类型删除aVar时应该编译
答案 0 :(得分:3)
如果让这个函数取T *而不是T?
答案 1 :(得分:2)
这是一个方便的实用程序,但我认为最好习惯在使用原生NULL
后分配delete
。
要获得仅考虑可修改指针类型参数的函数,请使用
template< typename T > // The compiler may substitute any T,
void delete_ref( T *&arg ); // but argument is still a pointer in any case.
要简单地找出某个类型是否为指针,请在Boost,TR1或C ++ 0x中使用is_pointer
中的<type_traits>
。