Давайте мне описать мою проблему. Я проанализировал следующий код, сгенерированный с помощью Visual Studio 2015 [Release] с помощью OllyDbg, а memset вызывается дважды (один раз с 408 байтами и последний с 400 байтами). Очевидно, что 408 байт - это компилятор, выполняющий нулевую инициализацию в моем классе.Это обычное поведение C++? компилятор ноль инициализирует мой класс, несмотря на наличие определенного пользователем конструктора
Почему это происходит?
У моего основного класса уже есть конструктор, который должен избавиться от созданного компилятором конструктора.
Самое смешное: если я удалю член «someotherclas sb» из основного класса, m_buffer будет установлен только один раз (по мне, с 400 байтами).
// ConsoleApplication.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
class someotherclas
{
public:
int * ptr;
};
class mainclass
{
public:
char m_buffer[400];
someotherclas sb; //If I remove this, buffer will be memset once only (by me, in the constructor)
int a;
mainclass()
{
memset(m_buffer, 0x00, sizeof(m_buffer));
a = 6;
}
};
int main(int argc, char * arr[])
{
mainclass * buffer2 = new mainclass;
return 0;
}
Я предполагаю, что буфер должен быть m_buffer в вашем главном классе? – Goodies
Я подозреваю, что в реальном коде 'new mainclass'' на самом деле 'new mainclass();'. –
@Goodies - это правильно. буфер должен быть m_buffer, я сделал ошибку, которую я уже исправил. Кроме этого, весь код верен и может быть скомпилирован без каких-либо других модификаций. – Jts