Здравствуйте. Есть простой исходный код:
class TLibrary{
HINSTANCE hModule;
TLibrary( const TLibrary &){}
TLibrary(){}
public:
TLibrary(const char *LibName){
if( ( hModule = LoadLibrary(LibName) ) == NULL )
throw Exception("Can't load library");
}
virtual FARPROC getProcAddress(const char *ProcName){
FARPROC ptr = GetProcAddress(hModule, ProcName);
if( ptr == NULL )
throw Exception("Can't find func");
return ptr;
}
virtual ~TLibrary(){
FreeLibrary(hModule);
}
};
Думал, что он не содержит ошибок, и он действительно успешно компилируется без каких либо предупреждений и даже работает. Но вот простая проверка статическим анализатором кода выявила определенные потенциальные проблемы:
http://cppcheck.sourceforge.net/cgi-bin/democlient.cgi
Cppcheck 1.84
[test.cpp:3]: (warning, inconclusive) Member variable 'TLibrary::hModule' is not initialized in the constructor.
[test.cpp:6]: (style) Class 'TLibrary' has a constructor with 1 argument that is not explicit. Such constructors should in general be explicit for type safety reasons. Using the explicit keyword in the constructor means some mistakes when using the class can be avoided.
[test.cpp:1]: (warning) The class 'TLibrary' has 'copy constructor' but lack of 'operator='.
Done!
Есть ли здесь специалисты, которые могли бы объяснить на простом родном языке, в чем же тут проблема?