【发布时间】:2012-10-25 21:16:31
【问题描述】:
我知道这个问题的标题看起来有点伤脑筋,但我真的不知道如何用一句话来问这个问题。我会告诉你我的意思:
void f(T *obj)
{
// bla bla
}
void main()
{
f(new T());
}
据我所知,(几乎)每个 new 都需要一个 delete,这需要一个指针(由 new 返回)。在这种情况下,new 返回的指针不会存储在任何地方。那么这会是内存泄漏吗?
C++ 是否有某种魔法(程序员不可见)在函数结束后删除对象,还是这种做法总是一个坏主意?
【问题讨论】:
-
函数结束后肯定不会被删除。它可以在函数结束时删除,但在这种情况下,它本质上是一个局部变量,不需要堆分配。
-
除非
f()删除它,否则它会泄漏。 -
@FredLarson 但这不是一个好的编程习惯,对吧...
-
@connectionist - 这基本上就是智能指针构造函数的工作方式 - 你
new()一些东西,并将其传递给构造函数。然后智能指针负责删除。但我同意,总的来说,这是一种代码味道。