作用域与构析函数
执行如下代码,输出的结果只有”一个物品已经生成“ 由于system(”pause“)所以构析函数 ~Item不会被执行;
#include <iostream>
#include <string>
using namespace std;
class Item
{
public:
Item()
{
cout << "一个物品已经生成!\n";
};
~Item()
{
cout << "一个物品已经销毁!\n";
};
};
int main()
{
Item item;
system("pause");
}
当我们添加一个作用域的时候构析函数就会被执行
int main()
{
{
Item item;
}//这样构析函数就会执行
system("pause");
}
因为构析函数只会在一个作用域结束的时候才会被调用,在上面第一个例子中的作用域包含了system(”pause“)所以当暂停时作用域没有被执行完成,所以不会调用构析函数,而第二个例子中作用块是{Item item};这个作用块执行完就会启用构析函数输出 “一个物品已经销毁!\n”
也可以利用静态函数来实现
int main()
{
static Item item;
system("pause");
}
效果和上面相同