В C++ всё (почти) необходимо явно инициализировать, а то потом можно получить очень интересные проблемы.
К конструкторам с одним аргументом лучше добавлять explicit, чтобы избежать неявных преобразований и всяких интересных эффектов по ходу работы программы.
Золотое правило: сами реализовали деструктор, конструктор копии, оператор копирования, конструктор перемещения или оператор перемещения, задумайтесь о том, что вам возможно надо реализовать все пять методов.
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);
}
};
Более того вы представьте, вам звонит начальник, который платит вам зарплату и вы знаете, что это звонит начальник, но вы не берете трубку или вовсе сбрасываете звонок - вот что должен делать в таком случае начальник?