c++ - c++ *& 和 null 验证
问题描述
假设我有以下功能:
void destroy(Song* song) {
if (song)
delete song;
}
可以将实现更改为以下内容以删除空验证吗?
void destroy(Song*& song) {
delete song;
}
如果是,为什么?
解决方案
您不需要检查空指针,delete
空指针是有效的并且什么都不做。
如果我们假设delete
空指针无效,那么您的第二个实现destroy
将不起作用,因为用户仍然可以执行以下操作:
Song* p = nullptr;
destroy(p);
推荐阅读
- java - 如何忽略 SIGTERM 并继续在 Java 中运行
- performance - 网络采样器(jmeter)的火狐配置不起作用
- javascript - JS - 当多个键具有相同的值同时对其他值求和时合并对象
- scala - 使用 macwire 注入 DatabaseConfigProvider
- css - 如何更改 Sharepoint“编辑模式”中显示的标准颜色
- javascript - 更改时间时更改下拉菜单
- r - 如何计算所有可能波段组合中的归一化比率指数,然后与 R 中的环境变量相关?
- angular - ./src/polyfills.ts 中的错误未找到模块:错误:无法解析“zone.js/dist/zone”
- swift - 如何在 Swift 中测量 DispatchQueue 并发异步中的代码块执行时间?
- python - 在 Pyspark Rdd 映射函数中传递 python 类对象