c++ - 不使用 /NODEFAULTLIB 调用构造函数
问题描述
我正在使用 /NODEFAULTLIB 禁用 CRT(C 运行时),但是没有调用我的构造函数,这最终导致 std::map 错误(访问冲突),因为它没有正确初始化,因为 std::map 构造函数是不叫。
使用 LLVM 8.0.0 编译的代码,以 debug x86 模式编译
class c_test
{
public:
c_test( int a ) // Constructor not called
{
printf( "Test: %i\n", a ); // Doesn't appear and breakpoint is not reached
}
void add( const std::string& key, const std::string& val )
{
_data[ key ] = val;
}
private:
std::map< std::string, std::string > _data;
};
c_test test{ 1337 };
int main()
{
test.add( "qwrqrqr", "23142421" );
test.add( "awrqw", "12asa1faf" );
return 1;
}
我已经实现了自己的函数 new(HeapAlloc)、delete(HeapFree)、printf、memcpy、memmove 等,并且都运行良好,我不知道为什么会这样。
解决方案
禁用 CRT 是疯狂的。
这执行关键功能,例如静态初始化。缺乏静态初始化是您的地图处于瘫痪状态的原因。我也完全希望标准库的各个部分停止工作;你真的给自己制造了一个巨大的问题。
不要重新发明关键机器的小部件——重新打开 CRT 并使用专家编写的代码。关闭它确实没有任何相对价值。
推荐阅读
- corda - Corda - 参考状态和“当前性”
- python - 我可以告诉机器学习模型因变量是正态分布的吗?
- rasa-nlu - 实现 Sql_tracker_store 的问题
- typescript - 抽象类需要一个属性。实现该属性时我不能使用“私有”。为什么?
- python-3.x - 5分钟后自动删除对象
- python - 熊猫发现缺少 15 分钟的间隔
- javascript - 从 Knex 更新中的连接表返回数据
- tensorflow - 时间序列 CNN,尝试使用 1,1 输入形状
- python - 无法从 pipeline.py 内部停止 Scrapy
- azure-devops - 在 Azure Devops 变量范围值发布意味着