对象销毁
如何手动销毁 指针、变量和类数组?
1. 引用(Reference):无法手动销毁
⚠️ 引用本身无法手动销毁!因为:
- 引用只是别名
- 生命周期跟随被引用对象
- 不能重新绑定到其他对象
2. 指针(Pointer)->delete
2.1 单个对象指针
| 1 | // 动态分配的单个对象 | 
2.2 数组指针
| 1 | // 动态分配的数组 | 
2.3 智能指针(推荐),自动销毁
| 1 | 
 | 
3. 普通变量!!:无法手动销毁
- 自动变量(栈上)会自动销毁
- 不需要也不能手动销毁
| 1 | void func() { | 
4. 类数组
4.1 栈上的类数组
| 1 | { | 
4.2 堆上的类数组
| 1 | // 动态分配的类数组 | 
5. 实际例子
| 1 | class Resource { | 
⚠️ 注意事项
- 避免内存泄漏: - 1 
 2
 3
 4- void bad() { 
 MyClass* p = new MyClass();
 // ❌ 忘记delete
 } // 内存泄漏!
- 避免重复删除: - 1 
 2
 3- MyClass* p = new MyClass(); 
 delete p;
 delete p; // ❌ 重复删除,未定义行为
- **数组删除要用 delete[]**: - 1 
 2
 3- MyClass* arr = new MyClass[5]; 
 delete arr; // ❌ 错误:应该用delete[]
 delete[] arr; // ✅ 正确
- 智能指针优先: - 1 
 2
 3
 4- // ✅ 推荐:使用智能指针 
 std::unique_ptr<MyClass> ptr(new MyClass());
 // 或更好
 auto ptr = std::make_unique<MyClass>();
💡 最佳实践
- 优先使用栈对象: - 1 
 2
 3- void func() { 
 MyClass obj; // ✅ 自动管理生命周期
 }
- 必要时使用智能指针: - 1 
 2- auto ptr = std::make_unique<MyClass>(); 
 auto shared = std::make_shared<MyClass>();
- 避免裸指针: - 1 
 2
 3
 4
 5- // ❌ 避免 
 MyClass* ptr = new MyClass();
 // ✅ 使用
 std::unique_ptr<MyClass> ptr = std::make_unique<MyClass>();
- 资源获取即初始化(RAII): - 1 
 2
 3
 4
 5
 6- class RAIIWrapper { 
 Resource* ptr;
 public:
 RAIIWrapper() : ptr(new Resource()) {}
 ~RAIIWrapper() { delete ptr; }
 };
- 清理后置空: - 1 
 2
 3- MyClass* ptr = new MyClass(); 
 delete ptr;
 ptr = nullptr; // ✅ 好习惯
需要我详细解释任何部分吗?比如 RAII 模式或智能指针的具体使用?
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Min的博客!
 评论
