要使用 object_pool 分配对象并将参数传递给它们的构造函数,请使用它的 construct 方法而不是它的 malloc 方法,如 @alex-f 所示。在你的情况下:
A* pa = pool.construct(1, 2); // The parameters are passed to A's constructor
问题在于,尽管boost::pool 库仅是标头,因此不需要构建本身,但需要声明和定义construct 方法以接受任意多个参数。由于使用最多接受 100 个参数的 construct 方法声明发送 boost::pool 会使标头过长并减慢编译速度,因此他们选择的解决方案似乎是需要运行一次性脚本 boost/pool/detail/pool_construct{_simple}.{sh,bat} 来生成construct 定义支持但需要许多参数。在boost::pool 以包的形式提供的Linux 发行版上,该脚本已为您运行。在 Windows 上或使用存储库中的库时,如果您不运行脚本,则构造方法将根本不可用。
pool_construct{_simple} 脚本需要一个名为 m4 的预处理器引擎。我发现在 Windows 上运行 pool_construct{_simple} 脚本的最简单方法是使用从 WSL 运行 bash 并运行:
sudo apt install m4
./boost_dir/boost/pool/detail/pool_construct_simple.sh 10
当然,如果您的构造函数接受超过 10 个参数,您可以更改参数。运行上面的命令会创建一个bool/pool/detail/pool_construct_simple.ipp,然后boost::pool 的常规包含文件将获得对construct 方法的支持。
运行非简单的pool_construct 脚本会创建定义,使得每个参数都是常规的const、volatile 或const volatile。所以对于 10 个参数,有 4^10 种方法可以编写需要 10 个参数。这会导致脚本运行很长时间,使用大量内存,并生成一个 ~700MB pool_construct.ipp 文件。我发现我的项目的定义方式,巨大的文件甚至没有使construct 方法可用于我的代码。