2

假设我有这个对象:

class Game{
public:
    void SetPointer(D2DResources&);

public:
    D2DResources* pD2DResources;
};

使用此功能:

void Game::SetPointer(D2DResources& p)
{
    pD2DResources=&p;
}

我在我的 WinMain 中这样做:

Game game;

D2DResources d2DResources();

game.SetPointer(d2DResources);

它会起作用吗?如果没有,正确的方法是什么?这个想法是稍后访问 d2DResources 的函数,如下所示:

pGame->pD2DResources->OnRender();

pGame 是指向上述游戏对象的指针。

4

1 回答 1

1

只要指向的实例保持活动状态,我认为您的方法没有问题。但是您似乎想在函数中声明实例WinMain,在这种情况下它将不起作用。

让我们先弄清楚:以下行

D2DResources d2DResources();

将声明一个函数,该函数返回 aD2DResources并且没有参数,而不是类型的变量D2DResources。如果您想要后者,请删除括号:

D2DResources d2DResources;

现在,如果您想让实例保持更长的活动时间,您应该使用std::shared_ptr. 一个示例可能如下所示:

class Game{
public:
    void SetPointer(D2DResources&);

public:
    std::shared_ptr<D2DResources> pD2DResources;
};

void Game::SetPointer(std::shared_ptr<D2DResources> p)
{
    pD2DResources=p;
}

在 中WinMain,使用:

Game game;

auto d2DResources = std::make_shared<D2DResources>();

game.SetPointer(d2DResources);

用法与您想要的相同。

于 2013-03-15T22:40:45.517 回答