是否可以使用Boost ::或Boost ::变体带有boost :: pool
Is it possible to use boost::any or boost::variant with a boost::pool?
boost :: any:
我尝试编译并运行以下代码进行测试:
#include <boost/any.hpp>
#include <boost/pool/object_pool.hpp>
int main()
{
boost::object_pool<boost::any> pool;
boost::any *i = pool.malloc();
*i = 1;
boost::any *j = pool.construct(2);
pool.destroy(i);
pool.destroy(j);
}
,但它在boost ::任何破坏者中都会获得segfault。
boost ::变体:
尝试编译并运行以下内容:
#include <boost/any.hpp>
#include <boost/pool/object_pool.hpp>
#include <boost/variant.hpp>
int main()
{
typedef boost::variant<int, double> my_variant;
boost::object_pool<my_variant> pool;
my_variant *i = pool.malloc();
*i = 1;
my_variant *j = pool.construct(2);
pool.destroy(i);
pool.destroy(j);
}
我有以下错误:
a.out:visitation_impl.hpp:207:键入访问者:: result_type BOOST ::详细:: variant :: visitation_impl(int,int,访问者&amp;,vpcv, mpl _ :: true_,nbf,w*,s*([带W = mpl _ :: int_&lt; 20>;s = boost ::详细:: variant :: visitation_impl_step, boost :: mpl :: l_iter>;访客= BOOST ::详细:: variant :: Invoke_visitor
;vpcv = void*;nbf = boost :: variant :: has_fallback_type_;typename访问者:: result_type = bool; mpl _ :: true_ = mpl _ :: bool_]:断言`false'失败。中止 (核心倾倒(
这是预期的行为吗?Boost ::池仅适用于简单的C 类型,例如INT,DOBLE,FLOAT等?
是的,boost池都可以使用。您只是在使用错误。
警告:实际上根本没有用
boost::any
使用池分配器,因为它会在池外动态分配持有值。,但这并不意味着您不能正确使用它。
malloc
仅分配非初始化的内存。您期望能够分配是您的错误,就好像它是该点所暗示的对象类型的功能齐全的实例。
T *i = pool.malloc();
new (i) T();
这解决了:
活在coliru
#include <boost/pool/object_pool.hpp>
#include <boost/any.hpp>
#include <boost/variant.hpp>
template <typename T>
void run_test() {
boost::object_pool<T> pool;
T *i = pool.malloc();
new (i) T();
*i = 1;
T *j = pool.construct(2);
pool.destroy(i);
pool.destroy(j);
}
int main() {
run_test<boost::variant<int, double> >();
run_test<boost::any>();
}
这也可以在Asan/Ubsan和Valgrind的下进行干净。
奖金问题
这是预期的行为吗?Boost ::池仅适用于简单的C 类型,例如int,doble,float等?
?
对于POD类型或琐碎类型,您可以通过ELIDE构造函数逃脱,就像C 编译器在这种情况下一样。
- 理解boost::asio-async_read在无需读取内容时的行为
- boost::进程间消息队列引发错误
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- cmake如何在fedora工作站中找到boost静态库包
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- Boost Graph Library,修复节点大小
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 是否可以使用Boost ::或Boost ::变体带有boost :: pool
- boost::asio io_service thread pool with io_service::work
- 使用boost :: pool时使用高CPU
- 在VS2010中使用Boost.Pool - 链接器错误
- boost::details::pool::pthread_mutex and boost::details::pool
- 如何使用boost.pool来实现类似stl映射的映射
- boost::threadpool::pool vs.boost::thread_group
- 使用boost::pool管理std::vector中的内存分配
- boost::asio io_service thread pool
- Boost::pool默认的chunk数量
- boost.pool如何实现已分配内存的重用
- 除了boost::pool之外,C++中的自定义池分配器
- 使用 boost.pool 而不是 'new' 作为对象的容器