我有一个std::vector<SomeType>
, 而SomeType
是struct
从各种模板参数实例化的。
最终在我的具体情况下,它变成了一个大型结构(大约 1MB)。在堆栈上分配这样的结构(即使用这种类型的自动变量)会立即导致堆栈溢出。但是由于std::vector
在堆上分配内存-应该没有问题。
令人惊讶的是,这有一个问题。具体来说,问题在于初始化。我执行以下操作:
std::vector<SomeType> myVec;
// ...
myVec.resize(N);
for (size_t i = 0; i < N; i++)
{
SomeType& x = myVec[i];
// initialize it
}
我在myVec.resize()
. 使用调试器进入内部resize()
显示,如果resize()
导致vector
增长 - 除了分配内存之外,它还通过“默认值”初始化新元素。
“默认值”是通过创建给定类型的自动变量、使用默认(即空)构造函数并将新元素分配给它来获得的。
我想知道是否有办法克服这个问题。我的意思是,告诉std::vector
不要初始化新元素。但我想在不生成不需要的代码的情况下实现这一点。
我可以考虑使用一个vector
(智能/共享/作用域/唯一)指针来输入。或者使用push_back
while 每个新元素都分配在堆上。但是所有这些不可避免的都涉及额外的代码。这是不合理的。
有没有办法实现我所需要的?然而:
- 仍在使用
std::vector<SomeType>
- 没有多余的堆分配
提前致谢