struct test_struct
{
test_struct() {}
~test_struct() {}
};
#include <vector>
#include <memory>
#include <cstdio>
int main()
{
printf("ctor begin\n");
{
std::vector<std::unique_ptr<test_struct>> test_vec;
const int count = 100000;
for (auto i = 0; i < count; i++) {
test_vec.emplace_back(new test_struct);
}
printf("dtor begin\n");
}
printf("dtor end\n");
}
Я использую VS2010 и нашел какую-то смешную проблему с производительностью. Приведенный выше код хорошо работает как в отладке, так и в выпуске build (ctrl + f5), но при подключении отладчика (f5) вызов dtor для класса unique_ptr является невыносимо медленным. Результат машинного кода довольно оптимизирован, поэтому я не ожидаю, что это проблема компилятора, а не отладчик, но я не знаю, как с этим бороться. Мой вопрос:Смешно медленный вызов unique_ptr dtor при подключении отладчика (msvc)
- Невозможно ли воспроизвести эту проблему на вашей машине?
- В чем причина такого поведения?
- Есть ли обходной путь?
Попробуйте промыть после каждого printf. – Pubby
@Pubby: Это не будет иметь никакого значения, всего 3 'printf's total, а не один для каждой итерации цикла. –
Я смог воспроизвести это на своем выпуске VS2010. – RedX