-2

我有一个类,我想将它作为一个全局对象(我有充分的理由),但为此我需要初始化所有元素(如果没有,我会得到 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");
}

任何想法我该怎么做?,谢谢!

4

1 回答 1

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");

    //...
}
于 2017-05-16T18:20:22.083 回答