は、デモの目的のためにこのクラスを考えてみましょう:質問について削除()クラスのインスタンスとその静的メソッド/変数
class test{
private:
int y;
HANDLE handle;
static int x;
public:
test()
int add();
static int sub();
}
test::test() {
[....]
sub = 1;
handle = (HANDLE)_beginthreadex(NULL,0,&test::sub,NULL,0,0);
}
test::sub() {
[....]
_endthreadex(0)
}
私は静的メソッド/変数についてはほとんどわからないと私は今、いくつかの質問を持っています。
1)テストのクラスインスタンスを作成してからdelete testを呼び出すと、静的変数もクリーンアップされますか?そうでない場合は、delete()を使ってデストラクタ内のすべての静的変数を手動でクリーンアップする必要がありますか(またはfree()ですか)?
2)スレッドが実行されているときに_endthreadexで終了すると、静的メソッドで手動クリーンアップが実行されますか?ご覧のように、ハンドル変数はスレッドを参照しています。事前に
おかげ
静的変数は、クラス内に名前があるグローバル変数と考えるのが役に立ちます。 –
@Michael - 私はそのように考えていましたが、グローバルはスコープで、生涯ではなく、静的変数はプライベートであると認識しました。グローバル変数は(静的変数は関数やファイルに対してもローカルであるため)(静的変数は1つしかないので)静的変数であると言う方がより正確です。 –
あなたが気にしなければもう1つ:test()インスタンスを削除すると、 'handle'でCloseHandle()を呼び出さなければならないのですか、インスタンスのdelete()中に自動的にクリーンアップされますか? – KaiserJohaan