unique_ptr

deleteをなくすには

deleteコードを減らすことは、複雑なコードの保守やリソースリークの観点で望ましい。下のようなコードでdeleteを消したい。 なお、new[]で確保した配列は、delete[]で削除しなければいけないことに注意。 class C { public: char* buf; unsigned int size; …

vectorとunique_ptr その3

vectorはコピーを使う、だからauto_ptrとおなじくunique_ptrは使えない。 以下のコードはコンパイルエラーが発生する。 vector<unique_ptr<C> > v; v.push_back( unique_ptr<C>( new C ) ); まれに、このコードをおすすめするHPが見られるが、コンパイルできるコンパイラーが</c></unique_ptr<c>…

vectorとunique_ptr その2

前回はコピーすべきところでムーブすべきではないことがわかった。 コードはshared_ptrを用いることで、すべてがうまくいくようになる。 class C { public: shared_ptr<int> d; C() : d(new int(0)) {} C( const int n ) : d(new int(n)) {} // コピーコンストラ</int>…

vectorとunique_ptr その1

vectorとunique_ptrの相性は悪い。 vectorはコピーが伴うものだし、unique_ptrはコピーコンストラクタを持たない。 以下のようなコードを考えてみる。 class C { public: int d; C() : d(0) {} C( const int n ) : d(n) {} ~C() {} }; void test_code() { ve…