gpt4 book ai didi

c++ - 将指向 A 的指针作为参数传递给 A 的函数是不好的做法吗?

转载 作者:行者123 更新时间:2023-11-30 04:55:33 25 4
gpt4 key购买 nike

传递一个指向对象 A 的指针作为函数的参数是一种不好的做法吗?

这是一个例子:

class A
{
A** ptrToMyself;

void Foo(A*& refToPtrToMyself)
{
ptrToMyself = &refToPtrToMyself;
}
}
class B
{
A* ptrToA;
void Bar()
{
ptrToA = new A();
ptrToA->Foo(ptrToA);
}
}

我需要这个的原因是 B 将创建 A 的实例,然后 A 将运行并稍后销毁自身。因为我不想在 B 中有一个无效的指针,所以我将该指针设置为 nullptr。

编辑:

因此,正如一些人所问,我将澄清我将使用它的目的。我正在 UE4 中制作游戏,基本上,A 类代表我拥有的 Attack 类(我继承它并覆盖一些虚函数以添加功能),B 代表我的角色类。当玩家按下攻击按钮时,我会实例化玩家选择的攻击类别。然后攻击执行,播放动画并完成所有它必须做的事情。当它完成时,它会自行销毁(并清除角色对它的引用)。

最佳答案

将指针传递给实例根本没有意义——this 指针已经是这样了。

这里更大的问题是您没有充分考虑对象生命周期的决定因素,更普遍地考虑底层异步性和它可能引发的冲突等。

异步动画基本上意味着您的动画类需要持有指向它们需要的所有对象(攻击等)的共享指针。这正是共享指针存在的原因;你可以在 B 的某个成员函数中初始化一个共享指针,在一些非阻塞动画函数中复制它,然后如果你摆脱 B 持有的共享指针也没关系,只要该对象存在因为某些动画对象持有指向它的指针。如果您的 bweak_ptr 保存到存在于别处的 ashared_ptr,则 b 可以跟踪 a 是否已经被销毁。

无论如何,主要问题是您在哪里跟踪正在进行的动画?

关于c++ - 将指向 A 的指针作为参数传递给 A 的函数是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52975977/

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