생성자가 수정하지 않고 저장하는 경우에만 HINSTANCE
을 전달할 이유가 없습니다.
class Foo
{
private:
//Class data
HINSTANCE hInstance;
public:
Foo(HINSTANCE hInstance = NULL, const std::string &name = "Default");
};
Foo::Foo(HINSTANCE hInstance, const std::string &name)
: hInstance(hInstance)
{
//...
}
이 그럼 당신은이 작업을 수행 할 수 있습니다 : 또는
Foo foo;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
foo = Foo(hInstance, "SomeName");
//...
}
:
#include <memory>
std::unique_ptr<Foo> foo; // or std::auto_ptr before C++11
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
foo.reset(new Foo(hInstance, "SomeName"));
// or, in C++14 and later...
// foo = std::make_unique<Foo>(hInstance, "SomeName");
//...
}
HINSTANCE
는 예를 들어, 그래서 그냥 NULL로 값을 전달하고 그것을 기본, 이미 시작에 대한 포인터입니다
특히 어떤 오류가 발생합니까? [MCVE]를 게시하십시오. –
전역의 안전한 주차 값으로 초기화하는 기본 생성자 또는'main'의 자동 변수를 가리키는'Foo '의 포인터를 추가하는 것을 막는 것에는 아무 것도 없습니다. 두 가지 모두 같은 단점을 가지고 있습니다 :'foo'는 완전히 초기화 된 상태로 사용되지 않을 수 있습니다. RAII를 관찰하는 것이 더 낫습니다. 세계에 대한 당신의 이유는 무엇입니까? 어쩌면 누군가가 더 안전한 대안을 제시 할 수 있습니다. – user4581301
윈도우를 만들고 싶을 때 Win32 API의 GetMessage에서 항상 오류가 발생하고 정적 함수로 작업하기 때문에 포인터를 만들 수 없기 때문에 창을 생성하기 때문에 전역에 대한 기본 생성자를 추가 할 수 없습니다. 나는 객체에 대한 포인터없이 main에서 다른 함수로부터 접근 할 수 있기 때문에 전역 변수가 좋은 선택이라고 생각한다. – OnelioD