你如何在win32下将全局变量实例化为C中的第一个东西?
我在
Windows上,我正在用VS2008构建一个C项目.我正在尝试替换new / delete / malloc / free等.这是有效的,即我的替换被调用.
但是我的替换分配器需要初始化.到目前为止,我已经将它定义为.cpp文件中的全局变量,并在其中定义了#pragma init_seg(lib). 直到最近std :: locale开始初始化时才开始工作,这在我的分配器初始化之前调用了new.所以我紧张地将我的allocator的全局变量移动到编译器段,即#pragma init_seg(编译器). 这工作了一点,然后我决定覆盖malloc.现在我在_tmainCRTStartup中的__crtGetStringTypeA_stat中获得了一个malloc调用,甚至在编译器段中的全局变量已经初始化之前. 有没有办法让我的变量在CRT启动之前被实例化.我唯一能想到的是重建我的crt lib并尝试一些如何在那里插入我的初始化代码.我认为必须有一个crt清理功能? 是否有更容易的途径和/或我在这里缺少的明显的东西? 解决方法
您正在使用静态存储持续时间对象.
但是你的初始化顺序有问题. MyAllocator& getAllocator() { static MyAllocator allocator; // Note the static here. // It has the appropriate lifespan and will be destoryed. // and is automatically constructed the first time this // function is called. return allocator; } 现在你的new / delete / etc版本可以通过调用getAllocator()获得对分配器的引用.这将保证对象被正确初始化(假设MyAllocator具有正确的构造函数). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Windows Phone 7 – WP7列表框滚动不工作
- 有没有办法在WIndows操作系统上使用UNIX GREP命令
- IIS站点启动或停止时写入Windows事件日志
- Apache服务器配置全攻略(目录)
- 仅允许与Windows Azure VM的本地网络连接?
- 通知 – windows 8 metro app – toast notifica
- 在Windows上用R中的SUB(1a)(Control-Z)字符读取文
- DK2头跟踪不工作“HMD关机,检查HDMI连接”在Wind
- 在Windows机器上从C#读取SMBus的简单方法?
- windows-mobile – 在UWP / Windows 10手机中更换