最後に一度だけの後始末 – プログラミング – Home

最後に一度だけの後始末
 
通知
すべてクリア

最後に一度だけの後始末


Mitinagi
 Mitinagi
(@Mitinagi)
ゲスト
結合: 21年前
投稿: 2
Topic starter  

はじめまして。

ただ今、Win32APIのラッパークラスを作っているのですが、
そのクラスの中で、最初に一度だけ初期化関数を呼ぶ、
最後に(プログラムが終了するとき)一度だけ後始末の関数を呼ぶ
ということをしたいのです。初期化のほうはフラグを持たせればできますが、
後始末の方はどうすればいいのか悩んでいます。
このクラスは singleton パターンを使っているので、
デストラクタの中で、

if( this = m_pInstance/*このクラスの型のstatic 変数*/ )
{
最後の後始末
}

というようにしたのですが、この実装はよいのでしょうか。


引用解決済
トピックタグ
MASATO
 MASATO
(@MASATO)
ゲスト
結合: 23年前
投稿: 53
 

その実装はコンパイルできないと思うのですが、いかがでしょうか。


返信引用
Mitinagi
 Mitinagi
(@Mitinagi)
ゲスト
結合: 21年前
投稿: 2
Topic starter  

あ、すみません。
this = m_pInstance
ではなくて、
this == m_pInstance
です。m_pInstance は、唯一のインスタンスを指すstaticなポインタです


返信引用
たく
 たく
(@たく)
ゲスト
結合: 21年前
投稿: 29
 

なんかよくわかりませんが、
フラグの替わりにカウンタを使えばよいのではないでしょうか?


返信引用
九条
 九条
(@九条)
ゲスト
結合: 21年前
投稿: 4
 

わたしは、シングルトンの実体をnewで確保したときなどの後始末を
プログラムの終了後にするとき、

class CUninitializer {
CUninitializer() {}
~CUninitializer() {
// 後始末
WSACleanup(); // 例
}
};
static CUninitializer s_uninitializer;

とかしています。
mainが終了後に、大体の場合においてCUninitializerの
デストラクタが働いて、解放処理をやってくれます。
ただ、staticな領域のデストラクタの実行順は不定なので、
他のクラスとの依存関係が存在するといろいろ面倒だったりします。


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

stdlib に int atexit(void (*function)(void))
という関数がありますが、どうなんでしょうかね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました