[√]关于 Dynamic atexit destructor for ***

简介: [√]关于 Dynamic atexit destructor for ***

image.png

分析

Dynamic atexit destructor for ***是一个编译器提示或警告消息,用于指示存在动态的析构函数注册(atexit destructor)。

在C++中,当程序退出时,静态对象和全局对象的析构函数会被自动调用来执行清理操作。这些静态对象和全局对象的析构函数通常是通过静态初始化完成的。

然而,有些情况下,可能存在动态创建的对象需要在程序退出时进行清理,例如使用new运算符动态分配的对象。为了确保这些动态对象也能在程序退出时正确地进行清理,可以使用atexit函数来注册析构函数。

当编译器检测到有动态的析构函数注册时,会生成类似于"Dynamic atexit destructor for ***"的提示或警告消息,以提醒开发者可能存在一些资源管理的问题。

如果你看到了这样的消息,可以进一步检查代码,确保动态分配的对象能够被正确释放和清理。

解决办法

一般遇到这个 call stack 很可能是全局变量析构函数中有依赖导致的。这个 call stack 会很短(因为有可能是任何情况导致程序退出),直接分析可能找不出原因。

至于全局变量的析构顺序,c++中没有明确定义,一般各个编译器实现为:根据构造的顺序逆向析构。

但是全局变量的构造又是很难控制的,以为各个全局变量会分布在不同的cpp文件中(编译单元)。

所以最好不要在全局变量的析构函数中做任何的清除工作,也不要让全局变量的析构函数之间有任何相互调用或依赖!

目录
相关文章
用IAR打开STM8时,出现“Unable to create configuration 'Debug' using tool chain ‘STM8’
用IAR打开STM8时,出现“Unable to create configuration 'Debug' using tool chain ‘STM8’
456 0
[√]addr2line
[√]addr2line
169 0
|
8月前
target overrides the `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` build setting defined in `Pods/Target S
target overrides the `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` build setting defined in `Pods/Target S
111 0
|
编译器
[√]添加预处理的2个不同方式:target_compile_definitions / add_definitions
[√]添加预处理的2个不同方式:target_compile_definitions / add_definitions
278 0
|
流计算
Blueprint Subsystem Plug-in description
Blueprint Subsystem Plug-in description
94 0
|
IDE 开发工具 数据库
STM32bug【 KEILMDK中出现The Project references devices, files or libraries that are not installed】
STM32bug【 KEILMDK中出现The Project references devices, files or libraries that are not installed】
297 0
|
人工智能
P8969 幻梦 | Dream with Dynamic
P8969 幻梦 | Dream with Dynamic
180 0
Bluetooth Profile Specification之3.0 RFCOMM服务
Bluetooth Profile Specification之3.0 RFCOMM服务
361 1
Bluetooth Profile Specification之3.0 RFCOMM服务
|
安全 数据安全/隐私保护
Bluetooth Profile Specification之1.0 A2DP初识
Bluetooth Profile Specification之1.0 A2DP初识
331 0
Bluetooth Profile Specification之1.0 A2DP初识
|
JavaScript 前端开发 数据可视化
Global Platform Tech Studio v1.2
GPTS是针对GlobalPlatform智能IC卡的安全域、安全通道、内容、密钥的可视化管理及通用脚本化、命令化处理的工具平台; 脚本语言选择ECMAScript [ECMA_262]标准即Javascript,参考《GlobalPlatform Systems Profile and Scripting Specifications v1.1》规范;
Global Platform Tech Studio v1.2