vectorを自体を消す方法について

投稿者: user28203

vectorのメモリ開放についてなのですが.resize()や.shrink_to_fit()を使って配列の要素数をゼロにしてcapacity()もゼロにすることはできると思うのですが、vectorそのものを消す方法はあるのでしょうか?
質問なのですがそもそもこのコードは正しいのでしょうか?初学者のため初歩的なことですいません。

        #include <iostream>
        #include <cstdlib>
        #include "conio.h"
        #include <iomanip>
        #include "math.h"
        #include <list>
        #include <sstream>
        #include "Header.h"
        #include <vector>
        using namespace std;


        void view(vector<int> &v)
        {
            unsigned int i = 0;
            for (; i < v.size(); i++)
            {       
                if ((i % 10) == 0)//9以上になったら改行
                {
                    cout << "n";
                }
                cout << "[" << setw(2) << i << "] " << setw(2)<<v[i] << " ";
            }
            cout << "nnnn";
            //cout << "-----------------nnnn";
        }

        int main() {


            vector<int> data{1,2,3,4,5,6,7,8,9,10};
            cout << data.size()<<"n";
            data.reserve(50);
            cout << data.capacity()<<"n";

            data.resize(20);
            cout << data.size()<<"n";
            cout << data.capacity() << "n";

            data.shrink_to_fit();
            cout << data.capacity()<<"nn";

            vector<int>().swap(data);

            cout<<data.size();
            delete &data;




            _getch();
            return 0;
        }

解決

提示コードにおいて vector<int> data; は自動変数ですから、それを包む { } の外に達すると寿命が尽きて消滅します。この例では main() が終了したら、ってことになります。

delete してよいのは new で得られたオブジェクトだけですから delete &data; はダメっす。

vector 自体は管理情報しか持っていませんのでせいぜい数十バイト、意識するだけ無駄な量だったりします。 Visual Studio のデバッグモードだとバグ検出用リザーブ領域のほうが大きかったりします。

あとメモリを開放すると一口に言ってもどこへ返すのかはいろいろと議論の余地がありますよ。
– 当該プロセス内で「未使用」とされる= OS から見てプログラムのメモリ使用量は変わらない
– 真に OS にメモリを返す
ではほかのプロセスから見た時のメモリ使用量が違います。んで、たいていの場合は前者だったりしますので、返す努力をしてもタスクマネージャ等から見たときメモリ使用量は一切変化してないってのはよくある話。努力しても報われないかもしれません。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *