0

ここに私のコード例があります

    class king
{
public:
    king(int q)
        :queen(q)
    {
    }

    ~king()
    {
        cout << "king's destructor." << endl;
    }

    void operator= (const king &k)
    {
        cout << "king's copy constructor." << endl;
        queen = k.queen;
    }

private:
    int queen;
};

void refFunc0(king &k)
{
    king &kk = k;
}

void refFunc1(king &k)
{
    king kk = k;
}

void main()
{
    int qqq0 = 55;

    king kkk0(qqq0);
    refFunc0(kkk0);

    cout << qqq0 << endl;

    int qqq1 = 66;
    king kkk1(qqq1);
    refFunc1(kkk1);

    cout << qqq1 << endl;

    cin.get();
}

上記のコードで何が起こったのかを説明できる人はいますか? つまり、参照を関数に渡すと、参照変数はデストラクタを呼び出し、参照として関数に渡された元の変数を破棄しますか?

4

3 に答える 3

7

参照はオブジェクトではなく、オブジェクトを参照するだけです。オブジェクトへの参照をバインドしても、オブジェクトの有効期間に影響はありません (参照がconst一時的で、オブジェクトが一時的な場合に延長される可能性があることを除けば、有効期間が短くなることはありません)。

于 2013-02-27T19:52:13.380 に答える
1

この機能:

void refFunc1(king &k)
{
    king kk = k;
}

kingのコピーを作成しています。コピーされたオブジェクトに対してデストラクタが呼び出されます。king次に、main() 内のオブジェクトに対してさらに 2 回呼び出されます。

于 2013-02-27T19:51:37.293 に答える
1

refFunc0 はまったく何もしません。参照は、単にオブジェクトの別の名前です。refFunc1 は kk に king のコピーを作成し、関数の終了時に kk を破棄します。kkk0 と kkk1 は「main」が終了すると破棄されます。

于 2013-02-27T19:55:29.253 に答える