我是一个类,我想把它作为一个全局对象(我有充分的理由),但为此我需要初始化所有元素(如果不是我得到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");
}
我怎么能这样做呢?谢谢!
答案 0 :(得分:0)
如果构造函数不打算修改它,则没有理由通过引用传递HINSTANCE
,只存储它。 HINSTANCE
已经是一个开头的指针,所以只需按值传递它并将其默认为NULL,例如:
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");
//...
}