将std :: vector分配给堆上特定内存位置的正确语法?

时间:2015-07-30 20:31:34

标签: c++ c++11 memory-management stl

我正在尝试实现这两个SO帖子中有关将容器分配到堆上特定内存位置的说明:

  1. Moving C++ objects, especially stl containers, to a specific memory location
  2. Create objects in pre-allocated memory
  3. 但是,我必须做一些愚蠢的事情(我是C ++的新手),因为我甚至无法编译代码(使用C ++ 11,如下所示):

      std::vector<int> ints1 = {10, 20, 30};
      ints1.reserve(20);
      auto adr = &(*ints1.end());
      auto *ints2 = new(adr)(std::vector<int>(20);
    

    我在最后一行收到expected , or ; before )的错误,我认为这意味着我的语法错误,但是如何?

    此外,一旦我修复了这种语法,确保这些对象真正连续的最佳方法是什么?我以为我会确保

    &(*ints1.begin()) - &(*ints2.begin) is roughly on the order of sizeof(std::vector<int> v(20));
    

    有更好的方法吗?

    (p.s。我确实认识到我应该分配我将用来做这个的内存以避免未定义的行为)

1 个答案:

答案 0 :(得分:2)

看起来你错过了a)之前;应该看起来像这样

 auto *ints2 = new(adr)(std::vector<int>(20));