首页 > 解决方案 > c++ *& 和 null 验证

问题描述

假设我有以下功能:

void destroy(Song* song) {
    if (song)
        delete song;
}

可以将实现更改为以下内容以删除空验证吗?

void destroy(Song*& song) {
    delete song;
}

如果是,为什么?

标签: c++pointersreferencedereference

解决方案


您不需要检查空指针,delete空指针是有效的并且什么都不做。

请参阅删除 NULL 指针是否安全?


如果我们假设delete空指针无效,那么您的第二个实现destroy将不起作用,因为用户仍然可以执行以下操作:

Song* p = nullptr;
destroy(p);

推荐阅读