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)
如果是,为什么?
您不需要检查空值,delete空指针是有效的并且不执行任何操作。
如果我们假设delete空指针无效,那么您的第二个实现destroy将不起作用,因为用户仍然可以执行以下操作:
Song* p = nullptr;
destroy(p);
Run Code Online (Sandbox Code Playgroud)