49565


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

[code]

            #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 << "\n\n\n\n";
                //cout << "-----------------\n\n\n\n";
            }
    
            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()<<"\n\n";
    
                vector<int>().swap(data);
    
                cout<<data.size();
                delete &data;
    
    
    
    
                _getch();
                return 0;
            }
    
[/code]


CC BY-SA 4.0
2018-10-23T09:39:47.323
49561
2018-10-23T10:26:50.307
question
c++
vectorを自体を消す方法について


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

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

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

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


CC BY-SA 4.0
2018-10-23T10:26:50.307
49565
2018-10-23T10:26:50.307
8589
49561
answer