【发布时间】:2012-05-11 21:58:19
【问题描述】:
我希望能够“以某种方式”创建一个动态数组,它仍然可以让我使用 new 运算符构建它的元素。 这是我想要实现的目标:
A* a = new A[3]; //or any equivalent syntax
new (&a[0]) A(myparams1); //placement new on first slot
new (&a[1]) A(myparams2, ...); //placement new on 2nd slot
new (&a[2]) A(myparams3, ...); //placement new on 3rd slot
delete[] a; //correct deletion of all elements
我知道这段代码可以工作(减去覆盖的 3 个元素),但我想避免在第一次调用 new[] 时创建 3 个默认的 a 元素。我在这里假设我会总是在调用delete[] 之前放置3 个元素。
我在想这样的事情可以通过对A::operator new[] 的智能调用来实现,但我不确定如何。
有谁有想法吗?主要是为了好奇
【问题讨论】:
-
你不喜欢 std::vector 的哪些部分?
-
第一行有语法错误,应该是
A * a。 -
还可以在这里查看 C++11 向量如何使用
emplace_backpush_back vs emplace_back 为您完成所有这些工作
标签: c++ arrays memory-management