对象池的不解?
#include <boost/pool/object_pool.hpp>
using namespace boost;
using namespace std;
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 _tmain(int argc, _TCHAR* argv[])
{
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 iLoop = 0; iLoop < 10; ++iLoop)//连续分配大量string对象
{
string *ps = pls.construct("hello object_pool");
cout << *ps<<endl;
}
return 0;
}//所有创建的对象在这里都被正确析构,释放内存.
为什么 pls这个变量, 没有malloc,就直接construct ? 而demo_class那个对象池却要malloc?
[解决办法]
construct估计就是::operator new + std::construct吧,直接默认构造的对象。
[解决办法]
boost::object_pool继承自boost::pool
malloc是boost::pool中的方法,是直接申请该模板类型的内存空间的,不会调用构造函数。
construct是boost::object_pool中的方法,内部调用malloc方法后,会显示调用构造函数。
malloc和construct的区别,只有是否调用构造函数而已。