在构造函数中初始化对 HINSTANCE 的引用
Initialize a reference to HINSTANCE inside constructor
我有一个 class 并且我想将它作为一个全局对象(我有充分的理由这样做),但是为此我需要初始化所有元素(如果不是我得到 C2512没有默认构造函数)这是一个问题,因为我在其上使用了对 HINSTANCE 的引用,我也需要对其进行初始化,但我不知道该怎么做。这是代码:
class Foo {
private:
//Class data
HINSTANCE hInstance;
public:
Foo(HINSTANCE & hInstance = ??, std::string name = "Default");
};
Foo foo;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
foo = Foo(hInstance, "SomeName");
}
知道我该怎么做吗?谢谢!
如果构造函数不打算修改它而只是存储它,则没有理由通过引用传递 HINSTANCE
。 HINSTANCE
已经是一个指针开始了,所以直接传值,默认为NULL,eg:
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");
//...
}
我有一个 class 并且我想将它作为一个全局对象(我有充分的理由这样做),但是为此我需要初始化所有元素(如果不是我得到 C2512没有默认构造函数)这是一个问题,因为我在其上使用了对 HINSTANCE 的引用,我也需要对其进行初始化,但我不知道该怎么做。这是代码:
class Foo {
private:
//Class data
HINSTANCE hInstance;
public:
Foo(HINSTANCE & hInstance = ??, std::string name = "Default");
};
Foo foo;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
foo = Foo(hInstance, "SomeName");
}
知道我该怎么做吗?谢谢!
如果构造函数不打算修改它而只是存储它,则没有理由通过引用传递 HINSTANCE
。 HINSTANCE
已经是一个指针开始了,所以直接传值,默认为NULL,eg:
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");
//...
}