Я использую / NODEFAULTLIB для отключения CRT (C Runtime), однако мой конструктор не вызывается, что приводит к ошибке в std :: map (нарушение прав доступа), поскольку он не инициализирован должным образом, так как std ::конструктор карты не вызывается.
Код, скомпилированный с LLVM 8.0.0, скомпилированный в режиме отладки 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 и т. д., и все работает отлично, я понятия не имею, почему это происходит.