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

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

admin5个月前 (05-05)数码19

函数中的变量

变量的作用

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-小心-它们或者导致意在行为和内存透露-静态变量中的圈套” 的相关文章

深化剖析-atomic-代码范例和实践运行-std-现代-中的原子-C (深化剖析整改)

深化剖析-atomic-代码范例和实践运行-std-现代-中的原子-C (深化剖析整改)

一、引言 在并发编程中,原子操作是一种无法终止的操作,即在多线程环境中,一旦开局就不会被其余线程搅扰。C++11引入了std::atomic库以支持原子操作,为并发编程提供了更为方便和高效的...

编程实践-哈希负载均衡算法-IP-C (编程实践心得体会)

编程实践-哈希负载均衡算法-IP-C (编程实践心得体会)

Nginx 是一个高性能的开源 Web 服务器和反向代理服务器,因其高效处理高并发的请求而闻名。以下是一些 Nginx 用于处理高并发的主要特点和技术: 事件驱动架构: Nginx 使...

揭秘性能与并发的机密-C-多线程编程 (性能与什么有关)

揭秘性能与并发的机密-C-多线程编程 (性能与什么有关)

当天咱们将深化讨论C++中的多线程编程,提醒多线程如何解锁性能后劲,提高程序的并发性能。 什么是多线程? 在计算机迷信中,多线程是指一个进程(程序的口头实例)中的多个线程同时口头。每个...

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

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

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

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

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

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

的区别-中-C-math.h-和-cmath (的区别中的钱)

的区别-中-C-math.h-和-cmath (的区别中的钱)

一、引言 C++规范库中的<cmath>和C言语规范库中的<math.h>均为数学函数库,它们提供了一系列数学函数和常量。但是,这两者之间存在一些关键的区别...

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

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

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

与设计形式-可裁减的代码-C-打造可保养 (设计与形式的关系)

与设计形式-可裁减的代码-C-打造可保养 (设计与形式的关系)

引言 C++是一种弱小的编程言语,它提供了许多工具和库以支持面向对象编程和通用编程。设计形式是一种用于处置特定疑问的经过验证的处置打算。C++的灵敏性和设计形式的广泛...