今天学习了C++中的RAII机制,主要是应对内存泄露的情况,通过将内存的动态申请放置在构造函数中,将动态内存的释放放置在析构函数中实现。
(1)malloc出来的空间,没有进行释放,存在内存泄漏;
(2)如果在malloc和free之间抛异常,那么同样存在内存泄漏问题。该问题称为异常安全问题。
这样,就将内存管理的职责下放给了对象,可以利用函数调用栈完成动态内存的管理,示例代码如下:
- #include <iostream>
-
- using namespace std;
-
- template<class T>
- class Raii {
- public:
- Raii(T * ptr_ = nullptr):ptr(ptr_) {
- }
- ~Raii(){
- if (nullptr != ptr) {
- cout << "delete ptr" << endl;
- delete ptr;
- }
- }
- T & operator*() {
- return *ptr;
- }
- T * operator->() {
- return ptr;
- }
- private:
- T * ptr;
- };
- #include "RAII.h"
-
- int main()
- {
- int * ptr = new int();
- Raii<int> raii(ptr);
- return 0;
- }

可以看到,离开作用域后,ptr被Raii类的析构函数释放动态内存。
参考资料:
https://blog.csdn.net/Willing_hope/article/details/108233756