📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
編集の要約なし |
|||
| 291行目: | 291行目: | ||
} | } | ||
} | } | ||
</source> | |||
<br><br> | |||
== vectorの解放(Swap技法) == | |||
関数内にて宣言して使用するvectorは、その関数を抜ければ自動でメモリの解放を行うが、<br> | |||
クラスのメンバ変数としてvectorを使用する場合は、クラスのデストラクタが実行されるまでメモリの解放を行わない。<br> | |||
<br> | |||
例えば、vectorのclear()関数を実行した場合、要素数は変化するがメモリは解放されない。<br> | |||
特に、サイズの大きい構造体などが解放されないと問題になる時がある。<br> | |||
<br> | |||
そこで使用されるのがSwap技法と呼ばれる手法である。<br> | |||
これは、vectorのswap()関数を使用して一時オブジェクトと交換することで、vectorのデストラクタを強制的に実行させる。<br> | |||
<source lang="c++"> | |||
// クラス内に要素数100のvectorを宣言 | |||
std::vector<int> m_vec(100); | |||
// Swap技法によるメモリの解放 | |||
std::vector<int>().swap(m_vec); | |||
</source> | </source> | ||
<br><br> | <br><br> | ||