記事検索
月別アーカイブ
アクセスカウンター

    タグ絞り込み検索
    2011年12月19日14:54make_shared

    make_sharedのつかいかたを調べようとしたらstd::make_shared ~ただのヘルパじゃない!というのをみ、make_sharedをつかうとメモリをひと塊でallocateしてくれることを知った。 速くなってるらしいし

    確認ってことで、こんなプログラムをつくってみて

    #include <memory>
    #include <cstdlib>
    #include <iostream>
    
    void* operator new(size_t sz) { std::cout << sz << std::endl; return malloc(sz); }
    void operator delete(void* p) { free(p); }
    
    struct A {
        char buf[1000];
        A() {}
    };
    
    int
    main()
    {
        std::cout << "make_shared" << std::endl;
        auto a = std::make_shared<A>();
        std::cout << "---" << std::endl;
    
        std::cout << "new+shard_ptr" << std::endl;
        std::shared_ptr<A> a2 (new A);
        std::cout << "---" << std::endl;
    
        for (;;) ;
    }
    

    実行

    % g++47 -std=gnu++0x -g foo.cc
    % ./a.out
    make_shared
    1032
    ---
    new+shard_ptr
    1000
    24
    ---
    ^C
    

    ヘッダファイルをみても詳細は理解できなかったが、実行結果からは確かにカウンタとオブジェクトを一緒にallocateしている。

    これが理由でmake_sharedにdeleterを指定できないんだろうなぁ、きっと。



    このエントリーをはてなブックマークに追加

    トラックバックURL

    コメントする

    名前
     
      絵文字