C++全局对象未能调用构造问题
情形:库A(A.h+A.cpp)中封装了一个内存管理类classA,
在一个头文件B.h中声明一个全局对象globalclassA,然后用它的方法重载了new和delete,
现在想要在代码中直接使用重载后的new和delete,但是遇到了问题:
内存管理类的对象被分配了对应的内存,却没有被构造。
请问有什么好的解决方案吗?(MSVC编译器) 从可执行文件的结构上来分析的话:通常情况下编译器会给你的全局初始化类生成构造函数,并且在CRT运行库初始化的时候调用这些函数。有时候编译器会将这些构造相关的函数或数据放到特定的区段(不一定是.text。有的时候是.ctor等)在这种情形下,如果你的编译工具链不是它的原生环境,或者你使用了某种链接器脚本,丢弃了诸如.ctor段等,就会导致全局变量无法被构造。
并不清楚你的运行环境是不是标准的exe、elf,还是单片机等嵌入式环境。 请问你的new是不是在另一个全局对象的构造函数中?有可能这个全局对象比A先构造,你无法保证编译器先构造谁,后构造谁。
页:
[1]