这是将指向对象的指针分配给函数的正确方法吗?

时间:2013-03-15 22:37:10

标签: c++ oop pointers

说我有这个对象:

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是指向上述游戏对象的指针。

1 个答案:

答案 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);

用法保持不变。