函数内临时变量的释放时刻
2012-04-13 11:45
225 查看
如果函数没有返回值,则函数内部的变量在函数执行结束之后全部释放;
如果函数有返回值,则函数内临时变量在函数所在的赋值语句执行完毕之后释放.
#include <iostream>
#include <string>
using namespace std;
class Base
{
public:
Base():selfid(++n)
{
cout<<"Base "<<selfid<<" by default"<<endl;
}
Base(const Base& other):selfid(++n)
{
cout<<"Base "<<selfid<<" by copy from "<<other.selfid<<endl;
}
Base& operator=(const Base& other)
{
cout<<"Base "<<selfid<<" by = from "<<other.selfid<<endl; return *this;
}
virtual ~Base()
{
cout<<"Base "<<selfid<<" destroyed"<<endl;
}
private:
int selfid;
static n;
};
int Base::n=0;
Base Test()
{
return Base();
}
int main()
{
Base b1;
b1=Test();
return 0;
}
![](http://my.csdn.net/uploads/201205/10/1336618829_9133.png)
从这里可以看出,函数Test内的b2,的释放是发生在赋值语句b1=Test()之后进行的
你能说出这里至少两处合理性吗?因为如果提前释放,赋值语句找不到赋值的来源.
相关文章推荐
- 程序员面试金典——解题总结: 9.17中等难题 17.1编写一个函数,不用临时变量,直接交换两个数
- 何时提炼函数 & 用查询取代临时变量
- Python、C++中编写函数以及不使用临时变量交换两变量值的比较
- 蚊子132 C++中函数局部变量指针是如何释放的呢?
- 不通过临时变量实现交换的函数
- 重新组织函数--Split Temporary Variable(分解临时变量)
- C++中函数建立临时变量的机制(const)
- php5的global变量在函数中释放
- 写一个不用cmp指令不用临时变量的int max(int a,int b)函数 不用if ? : switch
- 初学者关于c语言中函数局部变量空间释放的理解
- C++ 不用临时变量交换两个变量的值——函数对象
- 实现不创建临时变量,但交换两个数的函数
- php unset()函数销毁变量但没有实现内存释放
- C++函数返回临时变量的引用运行要出错
- 1. 给定两个整形变量的值,将两个值的内容进行交换。 2. 不允许创建临时变量,交换两个数的内容(附加题) 3. 求10 个整数中最大值。 4. 写一个函数返回参数二进制中 1 的个数
- 销量排名,使用临时表,不使用函数和变量情况下的实现
- 作为函数参数的临时变量的引用必须是const的
- 编写函数不允许创建临时变量,求字符串的长度
- 第2章 重新组织函数(3):引入解释性变量、分解临时变量和移除对参数的赋值
- 1. 给定两个整形变量的值,将两个值的内容进行交换。 2. 不允许创建临时变量,交换两个数的内容(附加题) 3. 求10 个整数中最大值。 4. 写一个函数返回参数二进制中 1 的个数