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