如何一次性为一堆物体分配记忆?

时间:2016-02-23 22:14:28

标签: c++ memory heap shared-ptr new-operator

我试图用C ++解析输入文件。在文件的开头,给出了要读取的行数。读完每一行后,我必须创建一个包含该行数据的对象。我在vector<shared_ptr<MyClass>>这样的向量中保留了指向每个对象的指针。

我想知道的是,只要知道行数,就为所有对象分配足够的空间。但是,我想如果我对我的向量使用reserve()函数,将分配足够的空间来保存指针而不是对象。

  1. 如何为对象和指针分配空间?
  2. 如果我想在创建对象时使用make_shared(),这会如何变化?换句话说,我应该如何为指针和指针管理器分配足够的空间?

1 个答案:

答案 0 :(得分:6)

似乎Pool Allocation对您有用。它预先分配大块内存并放置稍后在其中创建的对象。有一个std::allocate_shared函数,允许您控制std::shared_ptr和对象的控制块的创建位置。您也可以为类重载member operator new,以便在将它插入向量时强制它使用分配器,或者只使用池分配器来创建对象。

Boost.Pool是一个随时可用的池分配器实现。