当前位置:首页 > 数码 > C-小心-它们或者导致意在行为和内存透露-静态变量中的圈套

C-小心-它们或者导致意在行为和内存透露-静态变量中的圈套

admin1年前 (2024-05-05)数码60

函数中的变量

变量的作用

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 无法被回收。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: C

“C-小心-它们或者导致意在行为和内存透露-静态变量中的圈套” 的相关文章

深化探求模板编程的精华-从类型参数到智能推导-模板的艺术-C-把握 (深化探求模板范文)

深化探求模板编程的精华-从类型参数到智能推导-模板的艺术-C-把握 (深化探求模板范文)

类型模板参数 在示例中,模板有一个模板参数:存储在网格中的类型。编写类模板时,您须要在尖括号内指定参数列表,例如: 这个参数列表相似于函数或方法中的参数列表。与函数和...

提升性能的新利器-17中的并行功能-C (提升 性能)

提升性能的新利器-17中的并行功能-C (提升 性能)

C++17扩展了STL(Standard Template Library,标准模板库)以支持并行算法。这意味着许多常见的算法,如std::sort、std::for_each、std::tran...

开源项目-助初学者进阶成长-C-八个 (开源项目有什么用)

开源项目-助初学者进阶成长-C-八个 (开源项目有什么用)

通过参与或阅读开源项目的源代码,你可以获得丰富的实践机会。实际的项目代码比简单的教程更具挑战性,可以帮助你深入理解 C++ 的各种概念和技术。 ThreadPool 一个简单...

让新手也能轻松把握-C-类模板特化与承袭经常使用指南 (请问新手)

让新手也能轻松把握-C-类模板特化与承袭经常使用指南 (请问新手)

一、类模板特化 1.特化的成功 你可以为特定类型提供类模板的替代成功。例如,你或许以为constchar类型(C格调字符串)的Grid行为没无心义。Grid<constchar&...

了解圈套和无效经常使用技巧-言语变长参数-C (了解圈套和无线的区别)

了解圈套和无效经常使用技巧-言语变长参数-C (了解圈套和无线的区别)

C工具 变长参数列表 这局部解释了旧的C格调变长参数列表。了解这些内容很关键,由于你或许会在遗留代码中遇到它们。但是,在新代码中,你应该经常使用变参模板来成功类型安保的变长参数列表。...

监禁程序后劲的优化利器-C-中的内联函数 (监禁等于坐牢吗)

监禁程序后劲的优化利器-C-中的内联函数 (监禁等于坐牢吗)

一、内联函数的定义和特点 内联函数是一种不凡的函数,它经过在编译时将函数调用交流为函数体中的代码,以缩小函数调用的开支,从而提高程序的口头效率。内联函数通罕用于那些函数体较小、调用频繁的场景...

span-span-经常出现避坑指南-danger-C-class=text (span是行内元素吗)

span-span-经常出现避坑指南-danger-C-class=text (span是行内元素吗)

空指针调用成员函数会crash?? 当调用一个空指针所指向的类的成员函数时,大少数人的反响都是程序会crash。空指针并不指向任何有效的内存地址,所以在调用成员函数时会尝试访问一个不存在的内...

C-之父反驳白宫警告-的目标就一直是提高安全性-自诞生第一天起-C (c++之父精通c++吗)

C-之父反驳白宫警告-的目标就一直是提高安全性-自诞生第一天起-C (c++之父精通c++吗)

上个月,美国白宫国家网络主任办公室(ONCD)发布一份题为《回到基础构件:通往安全软件之路》的报告,呼吁开发人员停止使用容易出现内存安全漏洞的编程语言,例如C和C++,改用内存安全编程语言进行开发...