-----taodm-----请进, vector中new的对象的delete 问题
effictive STL里 条款7 :
......指针的”析构函数“是无操作。
template <class T>
void Des(T* p)
{
p-> ~T();
}
int main()
{
Test* p = new Test;
Des(p);
}试过之后, “有操作啊 "
看了
_destroy_aux(FIter, FIter, _true_type)
{
//空
}
template <class T>
struct _type_traits <T*>
{
typedef _true_type has_trivial_default_constructor;
........
}
意思是对指针类型的, 配置器都不会调用其析构函数, 而不是说
“指针的”析构函数“是无操作。” 是这样的吗?
再弱弱的问一下:
他说的原生指针, int* p; char* p;...... (为什么说“原生”指针)
class T
{};
T* p; 这也是原生指针?
[解决办法]
p-> ~T();
你这叫指针的析构函数?你调用的明明是T类型的析构函数,或者说调用了指针所指对象的析构函数。
template <class T>
void Des(const T & p)
{
p.~T();
}
这才叫调T类型的析构函数。