C-小心-它们或者导致意在行为和内存透露-静态变量中的圈套
函数中的变量
变量的作用
C++中关键字的最后一个用途是在函数内创立部分变量,这些变量在其作用域内分开和进入时坚持其值。函数内的变量相似于只能从该函数访问的全局变量。变量的一个经常出现用途是记住特定函数能否已口头过某个特定的初始化。例如,经常使用这种技术的代码或者看起来像这样:
voidperformTask(){staticboolinitialized{false};if(!initialized){cout<<"initializing"<<endl;//口头初始化。initialized=true;}//口头希冀的义务。}
但是,变量或者会惹起混杂,通常有更好的方法来结构你的代码,以防止经常使用它们。在这种状况下,你或者想编写一个类,其中结构函数口头所需的初始化。
非部分变量的初始化顺序
静态数据成员和全局变量的初始化
在分开数据成员和全局变量的主题之前,思考这些变量的初始化顺序。程序中的一切全局变量和类数据成员都在开局之前初始化。在给定源文件中的变量依照它们在源文件中产生的顺序初始化。例如,在以下文件中,保障在之前被初始化:
classDemo{public:staticintx;};intDemo::x{3};inty{4};
但是,C++对不同源文件中非部分变量的初始化顺序没有提供规范或保障。假设在一个源文件中有全局变量,在另一个源文件中有全局变量,你无法知道哪个会先初始化。通常,这种不足规范不会惹起关注。但是,假设一个全局或变量依赖于另一个,则或者会有疑问。回顾一下,对象的初始化象征着运转它们的结构函数。一个全局对象的结构函数或者会访问另一个全局对象,假定它曾经结构。假设这两个全局对象在两个不同的源文件中申明,你不能指望一个在另一个之前结构,也不能控制初始化顺序。这个顺序或者因不同的编译器或同一编译器的不同版本而异,甚至当你只是在名目中增加另一个文件时,顺序也或者扭转。
非部分变量的销毁顺序
非部分变量的销毁顺序与它们被初始化的顺序同样。不同源文件中的非部分变量以未定义的顺序初始化,这象征着它们的销毁顺序也是未定义的。
C语言静态变量问题?
该局部变量的值在函数调用结束之后不会消失,而仍然保留其原值。即它所占用的存储单元不释放,在下一次调用该函数时,其局部变量的值仍然存在,也就是上一次函数调用结束时的值。
第1次:返回0,m变成1
第2次:返回1,m变成2
第3次:返回2,m变成3
第4次:返回3,m变成4
第5次:返回4,m变成5
望采纳
内存泄漏:静态变量导致内存泄漏的一种情况
如果一个变量,既是静态变量,而且是非静态的内部类对象,那么就会造成内存泄漏: 这里定义的 Hello 虽然是空的,但它是一个非静态的内部类,所以它必然会持有外部类即 引用,导致 sHello 这个静态变量一直持有这个 Activity,于是结果就和第一个例子一样,Activity 无法被回收。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。