C++ 的 RALL 实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <memory>

int main ()
{
for (int i = 1; i <= 10000000; i++)
{
int32_t *ptr = new int32_t [3];
ptr [0] = 1;
ptr [1] = 2;
ptr [2] = 3;
delete ptr; // 假设忘记了释放内存,会消耗大量内存
}
system ("pause");
return 0;
}

RALL 机制便是通过利用对象的自动销毁,使得资源也具有了生命周期,有了自动销毁(自动回收)的功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <memory>

template<typename T>
class auto_release_ptr
{
public:
auto_release_ptr (T *t) :_t (t){};
~auto_release_ptr ()
{
delete _t;
};

T * getPtr ()
{
return _t;
}

private:
T *_t;
};

int main ()
{
for (int i = 1; i <= 10000000; i++)
{
auto arp = auto_release_ptr<int32_t>(new int32_t [3]);
int32_t *ptr = arp.getPtr ();
//auto_release_ptr 有一个数据成员在构造时完成了初始化并指向了 new 出来的空间
ptr [0] = 1;
ptr [1] = 2;
ptr [2] = 3;
}
system ("pause");
return 0;
}

更多的如智能指针,lock_guard 都利用了 RALL 机制来实现。

C++ learing 总览

C++ 四舍五入
C++ 取出一個數的每一位
C++ 利用 rand () 產生隨機數
C++ 小知识点总结
C++ 解釋一個語句
C++ #include
C++ RALL
C++ 运算符
C++ 万能标头档
讓 Dev C++ 支持 C++11