调用析构函数?

时间:2013-02-27 19:49:42

标签: c++

这是我的示例代码

    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();
}

任何人都可以帮助解释上面代码中发生的事情吗? 我的意思是如果我将一个引用传递给一个函数,那么引用变量是否会调用析构函数然后销毁传递给函数的原始变量作为引用?

3 个答案:

答案 0 :(得分:6)

引用不是对象,它们只是引用到对象。绑定对象的引用对对象的生命周期没有影响(除非引用是const并且对象是临时的,否则可能会扩展它,但它肯定不会减少生命周期)

答案 1 :(得分:1)

此功能:

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

正在创建king的副本。在复制的对象上调用析构函数。然后,再次在main()中的king个对象上再调用它。

答案 2 :(得分:1)

refFunc0绝对没有。引用只是对象的另一个名称。 refFunc1将在kk中创建一个king的副本,然后在函数结束时销毁kk。 kkk0和kkk1将在&#39; main&#39;结束。