函数内临时变量的释放时刻

2014-11-24 12:08:17 · 作者: · 浏览: 0

如果函数没有返回值,则函数内部的变量在函数执行结束之后全部释放;

如果函数有返回值,则函数内临时变量在函数所在的赋值语句执行完毕之释放.

class Object
{
public:
Object() {cout<<"Object"< ~Object() {cout<<"Object destroyed"< protected:

private:
};

class Base
{
public:
Base():selfid(n)
{
n++; cout<<"Base "< }
Base(int a):selfid(n)
{
n++; cout<<"Base "< }
Base(const Base& other):selfid(n)
{
n++; cout<<"Base "< }
Base& operator=(const Base& other)
{
cout<<"Base "< }
private:
int selfid;
static n;
};

int Base::n=0;

Base Test(Base b)
{
Object o;
return b;
}

int main()
{
Base b;
Base t=Test(b);
return 0;
}


\


b:0

Test(b):1

t:2

从这里可以看出,函数Test内的b,和o的释放都是发生在赋值语句创建了t之后进行的

你能说出这里至少两处合理性吗



摘自 ClamReason的专栏