class X { … };
void func()
{
boost::object_pool<X> alloc;
X* obj1 =
本文已经迁移到: http://cpp.winxgui.com/cn:gc-allocator-and-boost-object-pool
C++内存管理变革(4): boost::object_pool
许式伟 (版权声明)
2007-4-21
这篇文章拖的有点久了。NeutralEvil 在3个月之前就在催促我继续写了。只是出于WinxGui完整性的考虑,我一直在刻意优先去补充其它方面的文章,而不是让人去误会WinxGui是一个内存管理库了。:)
言归正传。我们在内存池(MemPool)技术详解已经介绍了boost::pool组件。从内存管理观念的变革来看,这是是一个传统的MemPool组件,尽管也有一定的改进(但只是性能上的改进)。但boost::object_pool不同,它与我在C++内存管理变革强调的观念非常吻合。可以认为,boost::object_pool是一种不通用的gc allocator组件。
我已经多次提出gc allocator的概念。这里仍然需要强调一下,所谓gc allocator,是指具垃圾回收能力的allocator。C++内存管理变革(1) 中我们引入了这个概念,但是没有明确gc allocator一词。
boost::object_pool内存管理观念
boost::object_pool的了不起之处在于,这是C++从库的层次上头一次承认,程序员在内存管理上是会犯错误的,由程序员来确保内存不泄漏是困难的。boost::object_pool允许你忘记释放内存。我们来看一个例子: