0

この例のリンクでは ....

https://stackoverflow.com/a/19737565/2948523

~ImprovedClass() ~Inner() のようないくつかのセクションを見つけました

彼らは何ですか?コードでそれらを使用する理由と方法

            class Inner
            {
                public Inner(IntPtr unkOuter)
                {
                }

                ~Inner()
                {
                }
            }

        public class ImprovedClass 
        {
            // constructor
            public ImprovedClass()
            {
            }

            ~ImprovedClass()
            {
            }
        }
4

3 に答える 3

3

これはデストラクタデストラクタです

それらは、オブジェクトが使用されなくなったにもかかわらず、オブジェクトがまだ保持している可能性のあるリソースを解放するために使用されます。

于 2013-11-05T11:52:31.333 に答える
2

これらはデストラクタと呼ばれ、インスタンスでのクラス インスタンスの寿命の終わりに自動的に呼び出されます。ここにコードを記述して、オブジェクトによって使用された一部のリソースを解放できます。デストラクタに関する注意事項を次に示します。

  1. デストラクタは構造体で定義できません。
  2. それらはクラスでのみ使用されます。
  3. クラスはデストラクタを 1 つだけ持つことができます
  4. デストラクタは、継承またはオーバーロードできません。
  5. デストラクタを呼び出すことはできません。それらは自動的に呼び出されます。

ここにいくつかのガイドがあります http://msdn.microsoft.com/en-us/library/vstudio/66x5fx1b.aspx

于 2013-11-05T12:03:11.853 に答える
0

~ マークは、コンストラクタではなくデストラクタに使用されます。

ハンドルやデータベース接続などのアンマネージ リソースを使用している場合は、後で取得して早期に解放するという原則を使用して、それらが保持される時間を最小限に抑える必要があります。C++ では、リソースの解放は通常、オブジェクトが削除された時点で決定論的に実行されるデストラクタで行われます。ただし、.NET ランタイムは、ガベージ コレクター (GC) を使用して、アクセスできなくなったオブジェクトによって使用されているメモリをクリーンアップおよび再利用します。これは定期的に実行されるため、オブジェクトがクリーンアップされるポイントは非決定論的です。この結果、管理対象オブジェクトを実行する決定論的な場所がないため、管理対象オブジェクトのデストラクタは存在しません。

于 2013-11-05T12:12:30.933 に答える