69242


ふと気になったのですが  
vector型の変数を使い終わった後って、  
そのまま関数を抜けたり再度宣言し直した時は何も処理しないでもメモリの解放をやってくれていると考えて良いのでしょうか


CC BY-SA 4.0
2020-08-04T09:47:11.137
69240
2020-08-18T02:32:45.437
2020-08-16T13:17:16.923
754
15047
question
c++
C++でstd::vectorの使い終わってからの開放処理


「使い終わった後」が専門用語でなくていかにもあいまいですが

> 何も処理しないでもメモリの解放をやってくれていると考えて良いのでしょうか

`std::vector` 型の自動変数が寿命を迎えるとき、という意味なら Yes  
専門用語で「デストラクトされる」ときにはメモリの解放を行います。

[code]

    void func(int n) {
        std::vector<int> a(n);
        ...
    } // この行に達したとき a は寿命を迎え、メモリは解放されます
    
[/code]

* * *

別例追加

[code]

    void func2(int n, int m) {
        // この例は n 回のループをしている場合で
        // （コンストラクト＋デストラクト）はセットで n 回行われる
        for (int i=0; i<n; ++i) {
            std::vector<double> a(m); // ここでコンストラクト＝メモリ確保される
            ...
        } // ここで a はデストラクトされる＝メモリは解放される
        // ここではなにも起きない
    }
    
[/code]

プログラム上「メモリが解放」されても、タスクマネージャ等から見たメモリ使用量が即座に減るようなことはないことには注意。そんな重い処理を毎度毎度していると無駄なだけです。


CC BY-SA 4.0
2020-08-04T10:37:25.453
69242
2020-08-18T02:32:45.437
2020-08-18T02:32:45.437
8589
8589
69240
answer