具有boost :: pool_allocator用法的Boost :: factory

时间:2013-06-25 12:37:01

标签: c++ memory boost factory allocator

我正在尝试了解boost :: factory并特别将其与自定义分配器一起使用

#include <boost/smart_ptr.hpp>
#include <boost/functional/factory.hpp>
#include <boost/pool/pool_alloc.hpp>
class Foo{
public:
    Foo() {};
    Foo(const std::string param) : m_param(param)
    const std::string param() const { return m_param; }
private:
    const std::string m_param;

};

int main(int argc,char** argv)  {
    // This doesn't work
    boost::factory<Foo*,boost::pool_allocator<Foo*>> g;
    // But this does
    boost::factor<boost::shared_ptr<Foo>,boost::pool_allocator<Foo>> h;

    auto x = h("http://www.bar.com");
    // Test to call a method
    x->param();

    // Release memory - do I need to do that for shared_ptr?
boost::singleton_pool<boost::pool_allocator_tag,sizeof(Download)>::release_memory();
    return 0;
}

我的问题 1.为什么第一个版本不起作用? 2.如果shared_ptr正在执行此操作,为什么我需要释放分配器的内存?或者是仅用于构造的分配器,并且由shared_ptr处理销毁?只是试图理解语义和'最佳实践'

0 个答案:

没有答案