C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でデストラクタを操作する


デストラクタ クラスのオブジェクトを削除する仕事をするC++のクラスの関数です。

デストラクタの呼び出し

クラスのオブジェクトがプログラムのスコープから外れると、デストラクタが呼び出されます。オブジェクトがスコープ外になる場合

  • プログラムは関数の範囲外になります。

  • プログラムは終了します。

  • オブジェクトのローカル変数を初期化するブロックがスコープ外になります。

  • オブジェクトの演算子が削除されたとき。

コードを見て、プログラムの出力を推測してみましょう。

#include <iostream>
using namespace std;
int i;
class destructor {
   public:
      ~destructor(){
         i=10;
      }
};
int valueInitializer() {
   i=3;
   destructor d1;
   return i;
}
int main() {
   cout<"i = "<<valueInitializer()<<endl;
      return 0;
}

出力

i = 3

最初にコードを理解しましょう。ここではグローバル変数Iを作成し、次に値初期化関数でその値を変更しました。ここでは、値3で初期化し、オブジェクトd1を作成して、値を返しました。

出力を推測しますか?

3です。正しく推測すれば拍手し、10だと思っても心配ありません。では、ここで何が起こったのか見てみましょう。

上で説明したように、呼び出し元の関数がスコープ外になると、デストラクタが呼び出されます。そして、スコープ外になる前に、関数は値3を返しました。

このブロックの出力を今すぐ推測してみてください

#include <iostream>
using namespace std;
int i;
class destructor {
   public:
      ~destructor(){
         i=10;
      }
};
int& valueInitializer() {
   i=3;
   destructor d1;
   return i;
}
int main() {
   cout<<"i = "<<valueInitializer()<<endl;
   return 0;
}

出力

これは似たようなコードですが、これは

印刷:i =10 代わりに。

なぜですか?

ここでは、値の代わりに変数参照を返しました。したがって、デストラクタが呼び出されると、値が10に変更され、参照が渡されると10が出力されます。


  1. C++での例を含む式ツリー

    式ツリーは、ツリーの各ノードが演算子またはオペランドで構成される特殊なタイプの二分木です。 リーフノード ツリーのオペランドを表します 。 非リーフノード ツリーの演算子を表します 。 例: 簡単に解決できる中置式を取得するには、順序トラバーサルを使用してツリーをトラバースする必要があります。

  2. C++で3nスライスのピザ

    さまざまなサイズの3nスライスのピザがあるとすると、私と2人の友人は次のようにピザのスライスを取ります- ピザのスライスを選びます。 友達のアマルが私のピックの反時計回りに次のスライスをピックします。 友達のBimalが、私のピックの時計回りに次のスライスをピックします。 ピザのスライスがなくなるまで、これらの手順を繰り返します。 ピザスライスのサイズは、時計回りの円形配列スライスで表されます。可能な最大のスライスサイズの合計を見つける必要があります。 したがって、入力が[9,8,6,1,1,8]のような場合、 次に、各ターンでサイズ8のピザスライスを選