我试图用C ++解析输入文件。在文件的开头,给出了要读取的行数。读完每一行后,我必须创建一个包含该行数据的对象。我在vector<shared_ptr<MyClass>>
这样的向量中保留了指向每个对象的指针。
我想知道的是,只要知道行数,就为所有对象分配足够的空间。但是,我想如果我对我的向量使用reserve()
函数,将分配足够的空间来保存指针而不是对象。
make_shared()
,这会如何变化?换句话说,我应该如何为指针和指针管理器分配足够的空间?答案 0 :(得分:6)
似乎Pool Allocation对您有用。它预先分配大块内存并放置稍后在其中创建的对象。有一个std::allocate_shared
函数,允许您控制std::shared_ptr
和对象的控制块的创建位置。您也可以为类重载member operator new
,以便在将它插入向量时强制它使用分配器,或者只使用池分配器来创建对象。
Boost.Pool是一个随时可用的池分配器实现。