-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsimple_object_pool_test.cpp
More file actions
55 lines (43 loc) · 1.71 KB
/
simple_object_pool_test.cpp
File metadata and controls
55 lines (43 loc) · 1.71 KB
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include "sample_object_pool.h"
// 示例对象
struct Task {
int id = 0;
std::string data;
Task() {
// 所有静态成员变量(无论是否 const、是否整型)都存储在程序的「静态存储区」,与全局变量、命名空间作用域的静态变量位于同一内存区域。
static int counter = 0;
id = ++counter;
std::cout << "Task #" << id << " created\n";
}
~Task() {
std::cout << "Task #" << id << " destroyed\n";
}
};
// 重置函数:清空任务数据
void reset_task(Task& t) {
t.data.clear();
std::cout << "Task #" << t.id << " reset\n";
}
// 主函数
int main() {
// 创建对象池,最多缓存 2 个对象,使用 reset_task 重置
SimpleObjectPool<Task> pool(2, reset_task);
std::cout << "\n--- 第一次获取 ---\n";
auto task1 = pool.acquire();
task1->data = "Work A";
auto task2 = pool.acquire();
task2->data = "Work B";
std::cout << "\n池中缓存数量: " << pool.cached_size() << "\n";
std::cout << "\n--- 归还对象 ---\n";
pool.release(std::move(task1)); // 归还后会 reset
pool.release(std::move(task2));
std::cout << "\n池中缓存数量: " << pool.cached_size() << "\n";
std::cout << "\n--- 第二次获取(复用)---\n";
auto task3 = pool.acquire(); // 复用 task1 或 task2
std::cout << "Reused task ID: " << task3->id << ", data: '" << task3->data << "'\n";
std::cout << "\n池中缓存数量: " << pool.cached_size() << "\n";
auto task4 = pool.acquire();
std::cout << "Reused task ID: " << task4->id << ", data: '" << task4->data << "'\n";
std::cout << "\n池中缓存数量: " << pool.cached_size() << "\n";
return 0;
}