boost
pool是个不错的库,可以省点内存管理功夫,内存池分配内存,还可以速度上比malloc更快一些。
boost::object_pool主要针对,对象的内存分配,他可以像使用new
一样来创建对象,对象的内存放在object_pool里面。
实际上object_pool使用pool类,代码上是object_pool继承pool类,object_pool比pool多些什么呢,多的就是new
比malloc多的那些内容.
object_pool::construct完成类的内存分配和建构,object_pool::destroy完成类的析构和内存释放。
在使用的过程中遇到一个问题.
class TestPool
{
TestPool(int a0,int a2,int
a3,int a4);
};
object_pool<TestPool> p;
p.construct(1,2,34),出错,错误信息叫我看看TestPool的定义,看了几次也没发现什么问题;
把参数改少两个,成功。
调试到一个pool_construct_simple.inc的文件
template <typename
T0>
element_type * construct(const T0 & a0)
{
element_type * const ret = malloc();
if (ret ==
0)
return ret;
try { new (ret) element_type(a0);
}
catch (...) { free(ret); throw; }
return
ret;
}
template <typename T0, typename T1>
element_type *
construct(const T0 & a0, const T1 & a1)
{
element_type *
const ret = malloc();
if (ret == 0)
return
ret;
try { new (ret) element_type(a0, a1); }
catch (...) {
free(ret); throw; }
return ret;
}
看明白了吧,他是通过定义模板函数来实现建构函数的。
他只实际了3个参数的函数,所以我们需要自已写一个,增加代码如下:
template <typename T0, typename T1, typename
T2,typename T3>
element_type * construct(const T0 & a0, const T1 &
a1, const T2 & a2,const T3 &a3)
{
element_type * const ret
= malloc();
if (ret == 0)
return ret;
try { new (ret) element_type(a0, a1, a2,a3); }
catch (...) {
free(ret); throw; }
return ret;
}
好了,一切搞定了,问题消失了。
生活怎么就这么没劲呢???
lixiaomail
2008-08-14
分享到:
相关推荐
相信不少人听过 boost 委员会提过 boost 里的对象池设计存在缺陷。我花了一些时间研究它的实现,发现其在效率上确实存在严重问题。这里给出一套解决方案。...可以完全替换你项目里的 object_pool。
Boost库是C++的一个强大工具集,它提供了`boost::asio`模块,用于处理网络和底层I/O操作,包括串口通信。本篇文章将详细介绍如何使用`boost::asio::serialport`来实现串口通信。 首先,我们需要理解`boost::asio`的...
boost::lexical_cast用法示例,包含数值转字串,字串转数值以及相应的异常处理代码
标题中的"orthanc ThirdPartyDownloads:boost_1_69_0_bcpdigest-1.5.6.tar.gz"指的是Orthanc项目的第三方依赖下载,其中包含的是Boost库的一个特定版本,即1.69.0,以及一个名为bcpdigest的工具,版本为1.5.6。...
3. **示例代码**: 使用Boost库的一个简单例子,如使用`boost::thread`创建线程: ```cpp #include <boost/thread/thread.hpp> void hello() { std::cout , World from a thread!" << std::endl; } int main...
boost::dijkstra_shortest_paths(g, s, boost::distance_map(boost::make_iterator_property_map(dist.begin(), boost::get(boost::vertex_index, g)))); return 0; } ``` ### 总结 Boost Graph Library是一个...
在TCP通信中,`boost::asio::async_connect`用于异步建立连接,`boost::asio::async_read_some`和`boost::asio::async_write_some`则用于异步读写数据。UDP通信中,`boost::asio::async_send_to`和`boost::asio::...
CMake Error at cmake/boost.cmake:81 (MESSAGE): You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST= This CMake script will look for boost in <directory>. If it is not there, it will download ...
2. **线程同步**:Boost线程库提供了多种同步机制,包括互斥量(`boost::mutex`)、条件变量(`boost::condition_variable`)、信号量(`boost::semaphore`)和事件(`boost::thread_specific_ptr`)。这些同步原语...
其次,Boost库中的智能指针(如boost::shared_ptr和boost::unique_ptr)在C++11标准中被采纳,成为std::shared_ptr和std::unique_ptr。这些智能指针管理对象生命周期,避免内存泄漏,提高了代码的安全性。在boost_1_...
总的来说,`boost::scoped_ptr`适用于单一所有权、局部管理的情况,`boost::shared_ptr`适用于需要共享所有权的场景,而`boost::weak_ptr`则作为解决循环引用和监视对象生存状态的工具。正确选择和使用这三种智能...
5. **正则表达式库**:`boost::regex`提供了强大的正则表达式支持,比C++标准库中的实现更为强大和灵活。 6. **并发与线程**:`thread`库提供了线程管理和同步原语,如互斥量、条件变量和future/promise,帮助...
3、在工程中设置工程属性来使用boost库 工程属性----------C/C++----------附加包含目录:D:\boost_1_61_0(此处就是你的安装目录)添加进去 工程属性----------链接器----------附加库目录:D:\boost_1_61_0\stage\...
然而,`std::unique_ptr`不支持拷贝构造函数和赋值操作符,所以我们需要使用`boost::serialization::make_nvp`创建一个命名值对,并在`archive`对象上调用`save_object`或`save_pointer`方法。 接下来是`std::...
boost_1_59_0.tar.zip boost_1_59_0.tar.zip boost_1_59_0.tar.zip boost_1_59_0.tar.zip boost_1_59_0.tar.zip boost_1_59_0.tar.zip boost_1_59_0.tar.zip boost_1_59_0.tar.zip boost_1_59_0.tar.zip boost_1_59_...
在电力电子领域,Boost转换器是一种常见的DC-DC升压变换器,用于将较低的直流电压提升至较高的直流电压。本资料"boost_pi_control_loop_design.rar"聚焦于Boost电路的PI(比例积分)控制器设计,旨在实现稳定的闭环...
Boost库是C++编程语言的一个开源库集合,它提供了大量的工具和库,旨在提升C++的效率、可移植性以及库的功能性。标题中的"boost_1_74_0.zip"表明这是一个Boost库的特定版本,即1.74.0版。这个版本的Boost是为Visual ...
boost::asio::serial下6个工程演示多种串口读取写入方式方法,包含simple,with_timeout,async,callback,qt_integration,stream 等多个工程演示多种方式读取,写入串口,char,string ,buffer[]等多种数据格式。