標準ライブラリにauto_ptrというのがあるのは知っていたか、どう使うのか分からなかったので試してみた。
#include <iostream> #include <memory> using namespace std; class Test { public: Test() { cout << "Test Constructor" << endl; } ~Test() { cout << "Test Destructor" << endl; } void Func() { cout << "Test Func" << endl; } }; int main() { std::auto_ptr<Test> pObj(new Test()); pObj->Func(); } 実行結果 Test Constructor Test Func Test Destructor
auto_ptrは作成されるときにオブジェクトのポインタを持ち、自分が破棄されるときに自分が持っているポインタのオブジェクトも破棄してくれる。auto_ptrを使えば、newした後、deleteしなくても大丈夫。というよりもdeleteし忘れを防ぐためのもの。
便利だけど欠点もある。同じオブジェクトを複数のauto_ptrで指し示してはいけないということ。auto_ptrが破棄されるときにオブジェクトをdeleteするので、複数あると複数回deleteすることになってしまう。