Skip to content

Latest commit

 

History

History
24 lines (15 loc) · 1.61 KB

如何避免悬挂指针?.md

File metadata and controls

24 lines (15 loc) · 1.61 KB
  1. 立即清空: 释放了指针指向的内存后,立即将该指针设置为nullptr(C++11引入的空指针字面量),这样就不会再指向之前的内存地址了。

    delete ptr;
    ptr = nullptr;
  2. 范围意识: 尽量使用局部变量来管理动态分配的内存,这样当控制流离开变量的作用域时,可以自动释放资源。智能指针(如std::unique_ptrstd::shared_ptr)在C++中是自动管理动态内存的很好选择。

  3. 避免野指针: 声明指针时,如果不立即初始化,就需要给它赋予nullptr,确保它不会成为野指针,指向某个随机的、不确定的内存位置。

    int* ptr = nullptr; // 初始化为nullptr,而不是未初始化的野指针
  4. 适时销毁: 在对象的生命周期结束时(例如,在析构函数中),确保释放所有动态分配的内存。对于类的设计,要格外注意拷贝构造函数和赋值操作符的正确实现,避免复制和赋值导致的悬挂指针问题。

  5. 引用计数: 使用引用计数如std::shared_ptr智能指针,它通过内部机制确保只有最后一个指针持有者销毁时才释放内存。

  6. 定期检查: 使用代码审查、静态分析工具和运行时调试工具来检测和定位可能的悬挂指针。

  7. 函数返回值: 避免从函数返回局部变量的地址或者引用,因为函数返回后,局部变量的生命周期就结束了。

  8. 注意回调和事件处理: 如果你注册了指针为回调或事件处理器,确保在废弃指针之前注销这些回调或事件处理器。