1. 程式人生 > >C++中函式引數的物件值傳遞問題

C++中函式引數的物件值傳遞問題

c++中函式的引數是值傳遞的時候,就會容易出現問題。比如int foo(Object a){}; Object a;foo(a);a作為引數傳入,進去呼叫函式,產生一個臨時的,區域性的,在棧中的物件a',a'是a的位拷貝。這樣子,當函式結束是,臨時物件a'的作用域結束,會呼叫a'的解構函式,那麼就可能對原來的函式a產生影響。比如如下下面的例子。 ------------------------------------------------------------------------------------------- #include <iostream>using namespace std;

class Simple{ 

public :  

Simple(int n):nValue(n)  

{   

buffer=new char[n];  

 int GetNValue() 

 {   return nValue;  

}  

~Simple()  {   if(buffer!=NULL)   {    cout<<"buffer"<<buffer<<"deleted";    delete buffer;   }  } private:  int nValue;  char *buffer;}; void foo(Simple a){ cout<<"in foo"<<endl;} int main(void){ Simple s(1); foo(s);// s.GetNValue();/* Simple b=s; s.GetNValue();*/ return 0;}