C++0x の std::shared_ptr を使う場合は, std::make_shared を使うことによって,普通にポインタを new する場合より効率が良く,また安全なコードが書けます: int main() { auto p = std::make_shared<std::string>( "hoge" ); // std::shared_ptr<std::string> p( new std::string("hoge") ); より効率がよく, // また(ここでは詳しく説明しないが)例外安全で,タイプ数も少ない! } しかし,これには,配列版が存在しません. もっと言うなら,「実行時に大きさの変化する領域」は, make_shared では普通には確保できません. もちろん,普段は std::vector を使えばいいので,特に問題にはなりませんが,効率を極限まで突き詰め