调用析构函数的参考?

问题描述:

这里是我的示例代码调用析构函数的参考?

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

谁能帮助解释上面的代码中发生了什么? 我的意思是如果我将一个引用传递给一个函数,那么引用变量调用析构函数将销毁传入该函数的原始变量作为引用?

+2

这不是一个复制构造函数,这是一个复制赋值操作符。 – 2013-02-27 19:50:19

此功能:

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

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

+0

谢谢,我明白了。 – Nowibananatzki 2013-02-27 20:43:24

参考文献不是对象,它们只是参考到一个对象。绑定对象的引用不会影响对象的生命周期(除非可能扩展它,如果引用是const且对象是临时的,但它肯定不会缩短生命周期)

+0

谢谢,我明白了。 – Nowibananatzki 2013-02-27 20:47:27

refFunc0完全没有任何作用。引用只是对象的另一个名称。 refFunc1将在kk中创建一个king的副本,然后在该函数结束时破坏kk。 当'main'结束时,kkk0和kkk1将被销毁。

+0

谢谢,我明白了。 – Nowibananatzki 2013-02-27 20:41:59