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

Mah*_*hdi 1 c++ memory heap shared-ptr new-operator

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

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

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

Rev*_*lot 6

看来Pool Allocation会对你有用.它预先分配大块内存并放置稍后在其中创建的对象.有一个std::allocate_shared功能允许您控制std::shared_ptr创建控制块和对象的位置.您也可以为类强制重载成员运算符new,以便在将它插入向量时强制它使用分配器,或者只使用池分配器来创建对象.

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