可能重复:
安全delete this吗?
我一直在为一个设计用作链表中的节点的类做一些工作,我想我会给类自己的删除功能而不是管理类这样做.所以基本上它是这样的:
void Class::Delete() {
//Some cleanup code before deleting the object
delete this;
}
Run Code Online (Sandbox Code Playgroud)
现在我已经对它进行了测试,看起来效果很好,但是我过去遇到过一个问题,即对象一直在运行代码,被删除,然后显然是通过尝试使用不再使程序崩溃存在的对象.
由于"删除这个"就在函数的末尾,它显然退出了函数并且工作正常,但这种做法是不是一个坏主意?如果我不小心,这会不会在我的脸上爆炸?
我正在开发一个相对较小的2D(顶视图)游戏演示,使用OpenGL作为我的图形.这是一个基本的隐形角度,因此我所有的敌人都在画一个视线,所以玩家知道他们在哪里.
到目前为止,我的一个问题是,当我绘制这个视线弧(作为一个填充的多边形)时,它自然地通过屏幕上的任何墙壁显示,因为没有什么能阻止它:
我很好奇我怎么能最好地阻止这样的事情.我已经有了代码,可以让我检测与墙壁等的线交叉(对于敌人的视线检测),理论上我可以用它来检测这种情况并相应地绘制多边形,但这可能是非常繁琐和/或低效,所以我想如果有任何内置的OpenGL系统可以为我做这件事,它可能会做得更好.
我已经尝试过寻找关于剪切/遮挡等主题的问题,但我甚至不确定这些是否正是我应该寻找的; 我的OpenGL技能有限.似乎任何使用glClipPlanes或glScissor的东西都不适合这种情况,因为有大量的单独墙壁等等.
最后,这只是我在业余时间制作的一个演示,所以图形并不是我主要担心的.如果有一种(合理的)无痛的方式来做到这一点,那么我希望有人可以指出我正确的方向; 如果没有简单的方法,那么我现在就可以解决问题或找到其他解决方法.
我对调用堆栈如何工作的了解是有限的,但我基本上想知道 - 如果我有一个程序在我自己的计算机上进行X次递归之后导致堆栈溢出(例如,一段时间后我做了一个小程序,这样做在我的计算机上大约400次递归),这在其他计算机上是否大致相同,或者它可能会有更多变化?
这与任何事情无关,我只是好奇.谢谢.