说我有这个对象:
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是指向上述游戏对象的指针。
答案 0 :(得分:1)
只要指向的实例保持活着,我认为你的方法没有问题。但似乎你想在函数WinMain
中声明实例,在这种情况下它不起作用。
让我们首先找到一个方法:以下一行
D2DResources d2DResources();
将声明一个函数,该函数返回D2DResources
并且没有参数而不是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);
用法保持不变。