说我具有以下功能: 可以将实现更改为以下内容,以删除null验证吗? 如果是,为什么? 答案 0 :(得分:5) 您无需检查是否为null,null指针上的 请参见Is it safe to delete a NULL pointer? 如果我们假设空指针上的 答案 1 :(得分:2) 从C ++标准(删除8..3版) Sp对空指针的检查是多余的。对于C函数void destroy(Song* song) {
if (song)
delete song;
}
void destroy(Song*& song) {
delete song;
}
2 个答案:
delete
有效且不执行任何操作。
delete
无效,那么您对destroy
的第二种实现将无法工作,因为用户仍然可以执行以下操作:Song* p = nullptr;
destroy(p);
free
同样有效。