C++构造与析构(18) - 静态对象(static object)何时销毁
来源:互联网 发布:linux vi中搜索字符串 编辑:程序博客网 时间:2024/05/22 03:20
C++的static关键字
static关键字可以用于修改局部变量,函数,类的数据成员以及对象。静态局部变量只初始化一次,然后在每次函数调用时都保持它的值。静态成员函数可以直接用类来调用,不需要创建对象来调用。同时,C++也支持静态对象。C++的静态对象(static object)
当使用static关键字声明一个对象时,此对象就变成了静态对象。见下面两个表达式。Test t; // 栈上的对象static Test t1; // 静态对象
第一个表达式会在栈上分配一个对象。也被称为自动对象或局部对象。局部对象在每次声明它时就会创建。而静态对象只初始化一次,并且在整个程序的生命周期中都存在。
静态对象保存在静态存储区。在程序结束时,它就会被销毁。C++既支持局部静态对象,也支持全局静态对象。
下面例子演示了局部静态对象的使用:
#include <iostream>class Test{public: Test() { std::cout << "Constructor is executed\n"; } ~Test() { std::cout << "Destructor is executed\n"; }};void myfunc(){ static Test obj;} // 函数结束时,obj不会被消耗,因为是静态对象。 int main(){ std::cout << "main() starts\n"; myfunc(); // 这里不会调用析构函数,因为函数体中分配的是静态对象。 std::cout << "main() terminates\n"; return 0;}
输出:
main() startsConstructor is executedmain() terminatesDestructor is executed
从结果可以看到,只有在主函数main()结束时,才会调用到析构函数。
如果删除掉上面程序中的关键字static,则会得到下面结果:
main() startsConstructor is calledDestructor is calledmain() terminates
全局静态对象
参考下面例子:输出:
Constructor is executedmain() starts10main() terminatesDestructor is executed
0 0
- C++构造与析构(18) - 静态对象(static object)何时销毁
- 1. 【创建与销毁对象】考虑用静态工厂方法代替构造器
- 【c#】面向对象简介(构造、析构函数,静态构造函数、静态类)
- 关于Object-c 中的构造函数与析构函数
- object-c的静态变量(static)
- 构造函数与析构函数何时执行
- C++ 构造函数与析构函数详解(三)---局部静态存储 局部static
- C++构造与析构(14) - 编译器何时创建默认构造函数和拷贝构造函数
- 黑马程序员---构造函数与Static静态
- (未完)【C/C++】对象的构造与析构
- 何时构造临时对象?何时休?
- 构造与销毁顺序
- C++ 构造,析构顺序(静态对象)
- 构造与析构 && static 问题
- C++中关于静态对象的使用( local static object and global static object)
- C++中关于静态对象的使用( local static object and global static object)
- C++构造与析构(5) - 何时必须自定义拷贝构造函数
- 【C++】类和对象(构造与析构)
- 数组指针
- C++构造与析构(17) - virtual拷贝构造函数
- skpye 4.3 installation and configuration in linux CentOS 7 / RHEL 7 / Fedora 20
- 使用 CXF 做 webservice 简单例子
- VIM使用学习笔记 : 按键说明
- C++构造与析构(18) - 静态对象(static object)何时销毁
- 卡永久QQ飞车紫钻 记录
- android中TypedValue.applyDimension()介绍
- Codeforces Round #304 (Div. 2)
- OpenERP 的XML-RPC的轻度体验+many2many,one2many,many2one创建方式
- BZOJ1096 [ZJOI2007]仓库建设(斜率优化dp)
- C++构造与析构(19) - 显式地调用构造函数和析构函数
- 内容提供者写法
- Windbg与虚拟机双机调试设置