我在遗留代码中发现了一个删除指针的宏。我尝试用函数替换它,但它使应用程序崩溃了。我不明白为什么。我的功能有问题吗?
//Legacy Macro
#define DEL_PTR(x) { if (x != nullptr){ delete x; } }
//My function
void delPtr(void * x) { if (x != nullptr){ delete x; } }
你永远不想在
delete
上调用 void*
,因为我们实际上并不知道它指向什么。相反,使用像这样的函数模板
template <typename T>
void delPtr(T* x) { if (x != nullptr){ delete x; } }