std::make_shared は基本的には効率的だけど弱点もあるよ,って話. struct Huge { int data[1024][1024]; }; #include <memory> #include <vector> int main() { std::vector<std::weak_ptr<Huge>> vec; for( int i = 0; i < 100000; ++i ) { auto p = std::make_shared<Huge>(p); vec.push_back(p); p.reset(); // *p の寿命はここで切れるけど, weak_ptr が残ってる限りメモリ領域は解放されない // 結果,メモリを食いつぶしてしまう // std::shared_ptr<Huge> p( new Huge() ); // なら問題ない } } 殆どの実装では