Gandhi)2018-08-30C++でのクラス初期化方法まとめc++でクラスをインスタンス化する際、以下のようにnewを使わない方法、newを使う方法、vectorコンテナを使う方法がある。newを使わない方法でインスタンスを生成するとスタックと呼ばれるメモリ領域に実体が確保され、newでインスタンスを生成するとフリーストア(≒ヒープ)と呼ばれるメモリ領域に実体が確保されます。newはフリーストアに動的にメモリを確保してそのアドレスを返す演算子であり、そのため、返り値をポインタで受けます。スタックに確保された実体は、スコープを抜けると自動で削除されますが、フリーストアに確保された実体は、スコープを抜けても自動で削除されることはありません。そのため、deleteで解放する必要があります。解放し忘れると使わなくなっても残り続け、さらに、そのアドレスを保持するポインタがなくなってしまうと実体は解放できなくなり、メモリリークになります。newを使う動的確保では、以下が実現できます。(スタックオーバーフローを発生させない)スタックのメモリ領域のサイズはあまり大きくないことが多く、スタック領域に巨大な変数を作るとスタック領域からあふれ出します。これをスタックオーバーフローと言います。変数の寿命を制御するvectorはスコープを抜けるとデストラクタが呼ばれますが、deleteできないので所望のタイミングでメモリ解放できません。そこで所望のタイミングで解放したい場合は、以下のようにswapを使います。一時的なオブジェクトはメモリが0でそれと交換することでhogeのメモリが解放され、その後、メモリ0の一時オブジェクトはすぐに解放されるので、結果的にメモリ解放をすることができるという仕組みです。スタックとヒープの説明は、以下のサイトが分かりやすいです。ufcpp.net動的確保に関してはこちら。learningフレームワーク月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。