C++相談室 part10
■ このスレッドは過去ログ倉庫に格納されています
0037デフォルトの名無しさん
NGNGだからその意味不明な動的/静的って言葉使うのやめれ。
「Class class;」という形で確保されるオブジェクトには2通りありうる。
1.グローバル、スタティック変数、クラスの静的メンバ。
この場合、オブジェクトの実体は静的なメモリ領域に確保される。
これは普通やらない。理由はコンストラクタ/デストラクタのタイミング。
2.関数内でスタック上に確保される場合。
この場合、「Class class;」とかかれた場所に処理が到達した時点でコンストラクタが実行され、
そこを含むスコープを処理が抜ける瞬間にデストラクタが実行される。
スマートポインタの類は必然的にこの形式で使用される(newで確保すると意味がない)し、
同期オブジェクトなんかのラッパクラスもこういった形で使うものがある。
こういったクラスはスコープを抜ける瞬間に確実に破棄されるという性質を利用してるわけだ。
余りでかいオブジェクトをスタック上に確保しようとするとスタックが足りなくなるのと、
スコープの終わりで破棄される以上一時的なオブジェクトしか作れない点に留意すれば
あとは好きにやればいいと思うが。
■ このスレッドは過去ログ倉庫に格納されています