example2_comparison_with_direct_construction.cpp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#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;
}
Back to std_make_shared