3.10.3 用法
object_pool的用法也是很简单,我们既可以像pool那样分配原始内存块,也可以使用construct()来直接在内存池中创建对象。当然,后一种使用方法是最方便的,也是本书所推荐的。
下面的代码示范了object_pool的用法:
- #include <boost/pool/object_pool.hpp>
- using namespace boost;
- struct demo_class //一个示范用的类
- {
- public:
- int a,b,c;
- demo_class(int x = 1, int y = 2, int z = 3):a(x),b(y),c(z){}
- };
- int main()
- {
- object_pool<demo_class> pl; //对象内存池
-
- demo_class *p = pl.malloc(); //分配一个原始内存块
- assert(pl.is_from(p));
-
- //p指向的内存未经过初始化
- assert(p->a!=1 || p->b != 2 || p->c !=3);
-
- p = pl.construct(7, 8, 9); //构造一个对象,可以传递参数
- assert(p->a == 7);
-
- object_pool<string> pls; //定义一个分配string对象的内存池
- for (int i = 0; i < 10 ; ++i) //连续分配大量string对象
- {
- string *ps = pls.construct("hello object_pool");
- cout << *ps << endl;
- }
- } //所有创建的对象
在这里都被正确析构、释放内存