Широкий спектр структур используется в программировании Win32. Много раз используются только некоторые из их полей, а все остальные поля обнуляются. Например:
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
Я хочу прекратить копирование такого кода и вместо этого использовать абстракцию, которая заботится об обнулении и настройке параметров. Давайте предположим, что мне нужна только инициализированная структура, как в примере, и никаких других настроек не требуется. Является ли следующее хорошее решение? Каковы возможные проблемы?
class CStartupInfo : public STARTUPINFO {
public:
CStartupInfo()
{
ZeroMemory( this, sizeof( STARTUPINFO ) );
cb = sizeof( STARTUPINFO );
dwFlags = STARTF_FORCEOFFFEEDBACK;
}
};
Меня особенно беспокоит вызов ZeroMemory () - похоже, я полностью управляю кодом, и у класса нет vtable, и вызов ZeroMemory () безопасен, и между этими двумя фрагментами кода нет большой разницы, за исключением последний обеспечивает абстракцию. Есть какие-нибудь предостережения?