NULL和nullptr你真的弄清楚了吗?

NULL:

优点:
  1. 兼容性NULL 是 C++ 语言中早期版本的标准,也被许多 C++ 程序员广泛使用。在老代码中,你会经常看到 NULL
缺点:
  1. 类型不明确NULL 通常被定义为 #define NULL 0 或者 (void*)0,这会导致它的类型模糊不清,可能会在某些情况下引发类型转换问题。

  2. 容易与整数混淆:因为 NULL 实际上是一个整数常量,所以在某些情况下,编译器可能无法识别出你错误地将一个整数赋值给了一个指针。

nullptr:

优点:
  1. 类型安全nullptr 是 C++11 引入的一种表示空指针的新方法。它的类型是 nullptr_t,这样在编译时可以更好地检测到类型不匹配的错误。

  2. 避免重载问题NULL 可以被重载为整数或其他类型,这可能导致一些意外行为。而 nullptr 不能像 NULL 那样被随意重载。

  3. 清晰易读nullptr 显式地表示空指针,从命名上就能看出其意图。

缺点:
  1. 老代码兼容性:一些老代码可能不支持或者不适合使用 nullptr,因为它是在 C++11 中引入的新特性。
  2. 比如`head->next = nullptr` 的意思是将链表的头节点指向空指针,也就是将链表中的第一个节点删除,使得链表为空。

    这样做的坏处在于:

    1. **丢失了链表的所有节点**:如果你将头节点的`next`指针设置为`nullptr`,那么链表中的所有节点都会被丢失,这可能导致内存泄漏,除非你在此之前已经释放了这些节点的内存。

    2. **导致链表断裂**:将头节点的`next`指针设为`nullptr`会导致链表断裂,这意味着你将无法遍历链表的其余部分,因为你失去了指向下一个节点的引用。

    如果你想删除链表的第一个节点,你应该采取以下步骤:

    1. 保存指向第一个节点的指针(通常称为`temp`)。
    2. 将头节点的`next`指针指向第二个节点。
    3. 释放`temp`指向的节点的内存(如果需要的话)。

    这样做可以保持链表的完整性,同时也能释放掉不再需要的节点的内存。

总的来说,如果你在一个支持 C++11 或更新标准的环境中工作,最好使用 nullptr。这样可以提高代码的可读性和安全性。然而,如果你在一个遗留的代码库中工作,可能会继续看到 NULL 的使用,这时你需要根据具体情况做相应的调整。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大哥不爱开笑玩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值