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() 中的对象上又被调用了两次。

于 2013-02-27T19:51:37.293 回答
1

refFunc0 什么都不做。引用只是对象的另一个名称。refFunc1 将在 kk 中创建 king 的副本,然后在函数结束时销毁 kk。当 'main' 结束时, kkk0 和 kkk1 将被销毁。

于 2013-02-27T19:55:29.253 回答