#include <iostream>
#include <ctime>
#include <ratio>
#include <chrono>
#include <cstdlib>
#include <memory>
#include <vector>
void freePointer(std::unique_ptr<int> aPointer){
// The unique ptr memory is released here
}
int main ()
{
using namespace std::chrono;
// POC1
std::vector<std::unique_ptr<int>> pointers;
for(int i=0;i<10000;++i) {
pointers.emplace_back(new int(3));
}
high_resolution_clock::time_point t1 = high_resolution_clock::now();
for(int i=0;i<10000;++i) {
pointers[i].reset();
}
high_resolution_clock::time_point t2 = high_resolution_clock::now();
duration<double> time_span = duration_cast<duration<double>>(t2 - t1);
std::cout << "POC1: It took me " << time_span.count() << " seconds." << std::endl;
// POC2
std::vector<std::unique_ptr<int>> pointers2;
for(int i=0;i<10000;++i) {
pointers2.emplace_back(new int(3));
}
high_resolution_clock::time_point t3 = high_resolution_clock::now();
for(int i=0;i<10000;++i) {
freePointer(std::move(pointers2[i]));
}
high_resolution_clock::time_point t4 = high_resolution_clock::now();
duration<double> time_span2 = duration_cast<duration<double>>(t4 - t3);
std::cout << "POC2: It took me " << time_span2.count() << " seconds." << std::endl;
return 0;
}
После тестирования в онлайн-компиляторе результаты показывают, что POC2 медленнее, но результат неубедительный, так как были ситуации, когда POC1 был медленнее.
POC1: потребовалось me 0,000578603 секунды.
POC2: Мне потребовалось 0,00146163 секунды.
Для одного запуска вы заменяете ордер, сначала POC2, а затем POC1, второй будет самым медленным.