#include <iostream>
#include <memory>
#include <chrono>
class LargeObject {
public:
LargeObject() { std::cout << "LargeObject constructed" << std::endl; }
~LargeObject() { std::cout << "LargeObject destructed" << std::endl; }
int data[1000000];
};
int main() {
{
auto start = std::chrono::high_resolution_clock::now();
for (int i = 0; i < 100000; ++i) {
std::shared_ptr<LargeObject> ptr(new LargeObject());
}
auto end = std::chrono::high_resolution_clock::now();
std::cout << "Direct construction time: "
<< std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count()
<< " ms" << std::endl;
}
{
auto start = std::chrono::high_resolution_clock::now();
for (int i = 0; i < 100000; ++i) {
auto ptr = std::make_shared<LargeObject>();
}
auto end = std::chrono::high_resolution_clock::now();
std::cout << "make_shared time: "
<< std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count()
<< " ms" << std::endl;
}
return 0;
}