在C++中Delete指针的用法

首先需要声明,delete指针只可以用于释放由new运算符动态生成的内存不可以用于释放静态分配的内存,还有自动存储期内的内存.

    静态分配(全局变量或静态变量)

  • 在程序的整个生命周期内都存在。
  • 不需要手动释放。l
  • static int globalVar; // 静态分配

    自动存储期(局部变量)

  • 在函数或代码块内创建和销毁。
  • 离开作用域时自动释放,不需要手动释放。
  • void func() {
        int localVar; // 自动存储期
    } // localVar 在 func 结束时自动释放

    在 C++ 中,delete 操作符用于释放之前使用 new 分配的动态内存。当你执行 delete ptr; 时,它只会释放 ptr 指向的内存,但不会删除指针 ptr 本身。指针 ptr 仍然存在,但它现在是一个“野指针”(指向已经被释放的内存),使用它将会导致未定义行为。

    为了防止出现野指针,释放内存后应该将指针设置为 nullptr。这样,指针就不会指向任何内存,从而避免潜在的危险。但是为什么现在写的那么多C++/C代码中很少看见有将删除的指针ptr=nullptr这个指令呢?:以下是原因分析:

在 C++/C 语言中,使用 `delete` 删除指针所指向的内存后,并没有系统自动将指针设置为 `nullptr` 的机制。这是一个常见的误解。实际上,`delete` 操作符只负责释放内存,而不会自动修改指针的值。

不经常看到 `ptr = nullptr;` 的原因可能有以下几点:

1. **代码风格和习惯**:
   - 有些开发者可能没有意识到将指针设置为 `nullptr` 的重要性,或者他们的代码风格和习惯中没有包含这一步骤。

2. **代码示例的简洁性**:
   - 在教学或示例代码中,为了保持简洁,可能会省略 `ptr = nullptr;` 这一步,尤其是在简单的示例或短代码片段中。

3. **自动存储期变量**:
   - 如果指针是函数内的局部变量,那么在函数结束时,局部变量会自动销毁,包括它们指向的内存(如果已经释放)。在这种情况下,将指针设置为 `nullptr` 不是必需的,因为指针本身很快就会不再存在。

4. **代码错误或遗漏**:
   - 有时,开发者可能忘记了将指针设置为 `nullptr`,或者认为这不是必要的,这可能导致野指针问题。

5. **代码上下文**:
   - 在某些情况下,开发者可能知道在 `delete` 之后不会再使用该指针,因此省略了设置 `nullptr` 的步骤。

尽管如此,将指针设置为 `nullptr` 后使用 `delete` 是一个好习惯,因为这可以避免野指针问题。野指针是指指向已经被释放内存的指针,使用野指针可能会导致未定义行为,包括程序崩溃、数据损坏等。

因此,最佳实践是在释放指针指向的内存后,立即将指针设置为 `nullptr`:

int* ptr = new int;
*ptr = 10;
delete ptr;
ptr = nullptr; // 避免野指针

这样做可以确保指针不会意外地被再次使用,从而提高代码的安全性和稳定性。

但是现在我不知道为什么我一用这个delete总会报错.
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值