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を指定できないんだろうなぁ、きっと。














