【C++】vectorの解放

公開日: : 最終更新日:2014/08/14 C/C++

スポンサーリンク

C++STLにあるvectorは配列の要素数がわからない場合などに非常に便利ですがメモリ関係で面倒だったりします。関数内などに宣言して使用したvectorはそこを抜ければ勝手にメモリ解放を行ってくれるようなのですが、クラスのメンバなどに宣言したものなどは(デストラクタを呼ばない限り)メモリは解放されないようです。

たとえばvectorを使い終わった後に一旦clearを行っても要素数は変化しますがメモリ自体は解放されないままになっています。面倒です。小規模なものなら問題ないかもしれませんが、それなりに大きい構造体のデータとかが大量に解放されないとなるとこれは大問題です。

そこで用いられるのがswap技法と呼ばれる手法です。vectorのメソッドであるswapを用いて一時オブジェクトと交換してやることでデストラクタを半ば強制的に動かしてやろうというものらしいです。

例)

std::vector<int> vec;
~
std::vector<int>().swap(vec);   //←swap技法による解放
スポンサーリンク
Amazon
  • このエントリーをはてなブックマークに追加

関連記事

【C言語/C++】int整数などの数値をchar配列の文字列に変換する

C++であればstringが使えて非常に便利ですが、C言語で文字列というと基本的にはcharの配列を

記事を読む

【C言語】fscanfでファイルを1行ずつ読み込む

C言語のfscanfでCSV形式(単純なカンマ区切り)のファイルを読み込むサンプル。 基本的なこと

記事を読む

OpenCVで矢印を描画する

OpenCVで矢印を描画するという関数が無いみたいだったので作りました。書いていることは参考リンク先

記事を読む

no image

【C++】既に main.obj で定義されています

error LNK2005: 既に main.obj で定義されています。 fatal error

記事を読む

【C++】行列演算ライブラリEigen

デフォルトのCやC++には行列やベクトルなどの演算ライブラリはありません。なので行列計算などをしよう

記事を読む

【C++】ファイルの読み込みまとめ

C++におけるファイル読み込みのまとめ ファイルの開き方 値の取得方法 >>演算子

記事を読む

【C言語】文字列に指定の文字列が含まれるか調べる

ある文字列に指定の文字列が含まれるかどうかを調べるにはstring.hにあるstrstr関数を使いま

記事を読む

【C++/CLI】フォームアプリケーションでコンソール画面を出現させる

プロジェクトのプロパティを開いて「構成プロパティ」→「リンカ」→「システム」の「サブシステム」を「コ

記事を読む

【C言語/C++】配列のまとめ

C/C++を使っていると必ず配列を使う場面が出てくると思いますが、その配列についてまとめました。C言

記事を読む

【C言語/C++】関数ポインタと関数オブジェクトを使ってみる

関数ポインタを使う 関数ポインタはポインタの一種で文字通り関数のポインタの事で、関数を遠隔操作でき

記事を読む

【Unity】他のスクリプトを一括で取得して有効化・無効化を制御する

Unityを使っていて他のスクリプトを一時的に停止させたいと思ったので

テレビの録画をPCやNASで共有する

今までテレビはテレビ用のモニターで見ればいいやと思っていたのですが、さ

【DeepLearning】物体検出手法のSSD(Keras版)を試す (Ubuntu14.04)

はやりのディープラーニングの物体検出手法の一つであるSSDのサンプルを

【Laravel5】既存のDBからデータを取得して表示する

はじめに 今まで作ったWebサイトをLaravel5で見れるようにし

【C++/OpenCV】cv::Matの画像にインパルスノイズを付加する

OpenCVで画像にノイズを付け足したいと思って調べたところ、Pyth

Intel Corei7-7700TでHTC Viveの動作確認

はじめに HTC ViveというVRヘッドセットで遊んでみたのでその

【Python】フォルダ内のカッコ付き数字ファイルを一括でリネームするスクリプト

はじめに タイトルどおりなのですが、指定フォルダ内のファイルのファイ

→もっと見る

  • Author : ががんぼ
    プログラミングやWeb関係で気付いたことについてメモしていく予定。だいたいが備忘録ですが、自分でサンプルを作って動かしてみたりしています。
PAGE TOP ↑