C++中函式引數的物件值傳遞問題
阿新 • • 發佈:2019-02-02
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;}