std::unique_ptr<int> foo; };
int main(int, const char*[])
{
std::vector<Foo> foos;
foos.reserve(10000);
for (int i = 0; i < 10000; ++i) {
Foo f;
f.foo = std::make_unique<int>(i);
foos.push_back(std::move(f));
}
for (int i = 0; i < 10000; ++i) {
std::cout << *foos[i].foo << "\n";
foos[i].foo = {};
}
foos.clear();
return 0;
}
слвременные MSVC/Clang могут догадаться что в вызове clear() деструкторы вызывать не надо? А если вызовы размазаны про разным TU? А если есть LTO?
А попробуйте в https://godbolt.org/
Попробовал, не вызывает, но в реальном кейсе этот потенциальный юник размазан по ТУ и по времени
(а, но возможно оно не вызывается, потому что return 0 - билет в один конец)
Обсуждают сегодня