c++ - 当我删除一个指针并且我没有立即分配任何东西时,我应该使用 NULL 还是 nullptr?
问题描述
改写标题,假设我已经删除了指针*ptr
,并且我想稍后只在我知道它是打开的时为其分配新的东西,我应该用NULL
or分配它nullptr
吗?如果两者都不好,那还有什么更好的方法呢?
根据我的研究,NULL
可以是 int 和指针类型,在执行重载函数时可能会搞砸,而nullptr
只是指针类型。但是,我仍然不知道何时使用哪个。我应该总是使用nullptr
我未分配的指针吗?如果是这样,目的是NULL
什么?
(顺便说一句,这是我在 Stack Overflow 上的第一个问题,如果我把它贴在不属于它的地方,请原谅我)
编辑:至于智能指针,我现在不能真正使用它们,因为我可能会被我们的教授骂。
解决方案
您根本不NULL
应该在 C++ 中使用。如果需要空指针值,请使用nullptr
.
NULL的目的是什么?
它是从 C 标准库继承的残余物。它在 C++ 中没有其他用途,除了使一些 C 代码有效 C++ 而无需更改 - 这曾经是 C++ 语言设计的重要组成部分,但随着这两种语言的分歧,多年来已经失去了它的重要性。
如果两者都不好,那还有什么更好的方法呢?
通常最好确保删除的指针是其超级对象正在被销毁的成员。在这种情况下,不需要为指针分配任何值,因为它即将停止存在。有关更多详细信息,请参阅 RAII 成语。
您应该避免使用裸拥有的指针,因此避免使用new
anddelete
直接。
推荐阅读
- java - 拆分字符串没有给出预期的输出
- python - 用于自动化脚本的 Web 服务
- php - laravel 上的图片上传无法在线工作:Laravel
- python - 在 Google Colab 上为 cpu 和 gpu 获取相同的运行时
- python - 如何仅过滤排列中的唯一对,python?
- javascript - 使用 PHP 在数据库中发送依赖下拉列表的值
- java - gradle 无法更改配置 ':compile' 的依赖项后,它已包含在依赖项解析中
- php - 如何使用 web.config 禁用 webDAV
- c++ - C ++中的语法派生类/结构
- asp.net - asp core web api http post为空