Zerando uma estrutura no construtor
Uma ampla gama de estruturas é usada na programação Win32. Muitas vezes, apenas alguns de seus campos são usados e todos os outros campos são definidos como zero. Por exemplo
STARTUPINFO startupInfo; // has more than 10 member variables
ZeroMemory( &startupInfo, sizeof( startupInfo ) ); //zero out
startupInfo.cb = sizeof( startupInfo ); //setting size is required according to MSDN
startupInfo.dwFlags = STARTF_FORCEOFFFEEDBACK;
//Now call CreateProcess() passing the startupInfo into it
Eu quero parar de copiar e colar esse código e, em vez disso, usar uma abstração que se preocupe com zerar e definir parâmetros. Vamos presumir que eu só preciso da estrutura inicializada como no exemplo, e nenhuma outra sintonia é necessária. A seguinte é uma boa solução? Quais são os possíveis problemas?
class CStartupInfo : public STARTUPINFO {
public:
CStartupInfo()
{
ZeroMemory( this, sizeof( STARTUPINFO ) );
cb = sizeof( STARTUPINFO );
dwFlags = STARTF_FORCEOFFFEEDBACK;
}
};
Estou particularmente preocupado com a chamada ZeroMemory () - parece que eu controle totalmente o código e a classe não tem vtable e chamar ZeroMemory () dessa forma é seguro e não há grande diferença entre os dois trechos de código, exceto que o último fornece uma abstração. Há alguma advertência?