お疲れ様です。
現在、デストラクタについて調べています。
デストラクタの逆関数であるコンストラクタは、
オブジェクトが生成されたときに呼び出されるということで、
コードで例えるならばNewされた時とわかりやすいのですが、
デストラクタのオブジェクトが破棄されたとき(解放されたとき)というのは、
コードで例えるとどのような処理に当てはまりますか。
Closeで良いのでしょうか?
VBAでは、下記コードでコンストラクタは呼び出せます。
Dim M As New MyClass ← オブジェクトの生成。コンストラクタが呼び出される。
オブジェクトの破棄は調べると下記文言がありましたが、
明示的な破棄は一般的にされないのでしょうか?
■オブジェクトが破棄されるタイミング
参照カウント方式です。オブジェクトへの参照数が0になると、すぐに破棄されます。
そのとき、Terminateイベントが呼び出されます(※1)。
ここでいう参照カウント方式では、下記URLを参考に調べました。
https://ja.wikipedia.org/wiki/%E5%8F%82%E7%85%A7%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88
すべてのオブジェクト(メモリ上におかれているデータの単位)に対して、参照カウントと呼ばれる整数値を付加しておく。これは、このオブジェクトへのポインタがシステム全体にいくつ存在しているかを数えるものである。
上記が参照カウント方式でのカウント方式らしいのですが、
>このオブジェクトへのポインタがシステム全体にいくつ存在しているかを数えるものである。
この部分の理解がいまいちです。
たとえば下記コードがあったとして、Mのオブジェクトのカウントは6ということでしょうか?
vba
1Sub Test() 2 Dim M As New MyClass 3 M.method1() 4 M.method2() 5 M.method3() 6 M.method4() 7 M.method5() 8End Sub
6つ最初にカウントしておいて、Mの使用がされるたびに減算していく方式?ということであっていますか?
つまり、M.method5()の実行後、カウントが0になり、デストラクタが呼び出されるということで良いですか?
デバッグで確認すると、デストラクタの呼び出しは、
Test()のEnd Sub通過後になっているようなので、
どういう方式で減算されていっているのか不明です。
お願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/25 04:26