c ++ *&和空验证

O.B*_*.B. 0 c++ pointers reference dereference

假设我有以下功能:

void destroy(Song* song) {
    if (song)
        delete song;
}
Run Code Online (Sandbox Code Playgroud)

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

void destroy(Song*& song) {
    delete song;
}
Run Code Online (Sandbox Code Playgroud)

如果是,为什么?

eml*_*lai 5

您不需要检查空值,delete空指针是有效的并且不执行任何操作。

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


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

Song* p = nullptr;
destroy(p);
Run Code Online (Sandbox Code Playgroud)