学習の2週目:型変換コンストラクターとデストラクター

とは

  1. 変換コンストラクタを定義する目的は、自動型変換を実現することです
  2. パラメーターは1つだけであり、パラメーターの型がクラス(コピーコンストラクターではない)、つまり変換コンストラクターと異なる
  3. 必要に応じて、コンパイルシステムは自動的に呼び出し、名前のない一時オブジェクトを作成します。
#include<iostream>
using namespace std;
class temp
{
    
    
	private:
		int real;
		int imag;
	public:
		temp():real(0),imag(0){
    
    }
		temp(int i):real(i),imag(0){
    
    }
		int r(){
    
    return real;
		} 
		int i(){
    
    return imag;
		}
};

int main()
{
    
    
	temp t1,t2(6);
	t1=9;    //9被自动转换为临时的temp对象 
	cout<<t1.r()<<" "<<t1.i()<<endl;
	cout<<t2.r()<<" "<<t2.i()<<endl;
}

結果
ここに画像の説明を挿入

デストラクタ

  1. オブジェクト配列の存続期間が終了すると、オブジェクト配列の各要素のデストラクタが呼び出されます
  2. デストラクタを呼び出す順序もLIFOに従います
  3. パラメータオブジェクトが終了すると、デストラクタが呼び出されます
  4. 戻り値はvalueで、一時オブジェクトのコピーも破棄されます。デストラクタを呼び出します

コンストラクタとデストラクタの呼び出しシーケンス

class temp{
    
    
		int x;
	public:
		temp(int i=0):x(i){
    
    cout<<"id = "<<x<<" Constructor 
		called\n";}
		temp(const temp& j):x(j.x){
    
    cout<<"id = "<<x
		<<" Copy constructor called\n";}
		~temp(){
    
    cout<<"id = "<<x<<" Destructor called\n";} 
		temp func(const temp& t); 
};

temp temp::func(const temp& t)
{
    
    
	x=t.x;
	static temp t4(5);
	cout<<"I am here\n"; 
	return t;
}
temp t0(1);  
int main()
{
    
    
	temp t1,t2(2);
	t1=3;
	{
    
    temp t3(4);}
	t1.func(t2);

}

分析:t0が最初に呼び出され、
t1が呼び出され、t2が呼び出され、
t1変換コンストラクターが呼び出され、一時オブジェクトが生成され、次にデストラクタが
t3が呼び出され、ライフサイクルがブロック内にあり、デストラクタが
funcメンバー関数を呼び出します呼び出されると、静的オブジェクトt4が呼び出され、
戻り値はvalue、一時オブジェクトコピーが生成されてから破棄され、次に
t1、t2(先入れ先出し、最後出し)、次にt4、次にt0 が呼び出されます

ここに画像の説明を挿入

(補足:コンストラクタとデストラクタの理解)

コンストラクターは記憶域を割り当てず、クラスは既にメモリ内にあり、コンストラクターが初期化を担当します。デストラクタは、ストレージスペースの回収を担当しませんが、

おすすめ

転載: blog.csdn.net/ZmJ6666/article/details/108552133