gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:28:34 26 4
gpt4 key购买 nike

假设我有这个对象:

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

最佳答案

只要指向的实例保持事件状态,我认为您的方法没有问题。但似乎您想在函数 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);

用法与您想要的保持一致。

关于c++ - 这是将指向对象的指针分配给函数的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15443192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com