|
|
|
|
|
by kllrnohj
2712 days ago
|
|
But you can easily avoid that cost on std::vector, too. std::vector doesn't default-initialize unless you ask it to via resize(). reserve() doesn't initialize, though, it just allocates. Take this toy example: #include <vector>
#include <cstdio>
struct MyFoo {
MyFoo() { printf("default ctor\n"); }
MyFoo(int i) { printf("Initialized with %d\n", i); }
MyFoo(const MyFoo& foo) {}
};
int main() {
std::vector<MyFoo> myvec;
myvec.reserve(100);
printf("resize(2)\n");
myvec.resize(2);
printf("emplace_back()\n");
myvec.emplace_back();
printf("emplace_back(1)\n");
myvec.emplace_back(1);
printf("push_back(MyFoo{1})\n");
myvec.push_back(MyFoo{2});
return 0;
}
It will print: resize(2)
default ctor
default ctor
emplace_back()
default ctor
emplace_back(1)
Initialized with 1
push_back(MyFoo{1})
Initialized with 2
Only the resize() call did a default initialization "silently", nothing else did. |
|