テンポラリバッファとしてのvector

http://www.geocities.jp/ky_webid/cpp/library/002.html

一時的な動的バッファを用意したい場合、vectorを利用すると便利です。

普通にnewで確保した場合、

void foo (int size) {
    char* buf = new char[size]
    
    // いろいろ
    
    delete [] buf;
}

のように、最後にdeleteを呼ばないといけません。

ですがvectorを利用すれば、vectorのデストラクタ内で領域が解放されるのでdeleteを意識せずに済みます。

void foo (int size) {
    vector<char> buf(size);
    
    // いろいろ
}

deleteを意識しなくても良いというのはかなり便利です。

例えばnewで確保していた場合は、関数からreturnで抜ける全ての箇所でdeleteをしないといけません。

void foo (int size) {
    char* buf = new char[size]
    
    // いろいろ
    
    if ( flag ) {
        delete [] buf;
        return;
    }
    
    // いろいろ
    
    delete [] buf;
}

こういう面倒臭い作業を回避できるのでvector使ったほうがいいですね。

また、バッファではなく、単一のオブジェクトを一時的に用意したい場合はvectorではなくauto_ptrというものを使ったほうが良いらしいです。auto_ptrについてはまた今度。