【发布时间】:2016-05-11 14:00:32
【问题描述】:
假设我们有两个 C++ 代码片段:
1:
void fun1()
{
if(1)
int a=5;
}
2:
void fun2()
{
if(1)
{
int *b = new int;
b = 5;
delete b;
}
}
它们是等价的吗?程序离开if 块后,分配给a 变量的内存是否被释放?如果没有,什么时候释放?
【问题讨论】:
-
您可能想要
*b = 5而不是b = 5。不,这些是不等价的,因为第一个分配在堆栈上,而第二个分配在堆上。 -
和 Holt 所说的一样,请注意堆栈分配比堆分配快得多。
-
好吧,第一个可能根本没有分配到任何地方,或者(如果是的话)它只是您的 数据段 中的固定内存位置(不是在堆栈上,顺便说一句)但它确实是一个编译器的东西,它会做它喜欢做的事情 - 假设没有特殊的存储修饰符(我也假设缺少 * 只是一个错字......)
-
我想您可以使用 sizeof() 函数自己确定这一点。这是我要迈出的第一步。 @Holt 是正确的,你的 b = 5 没有做你期望的事情。
-
最大的不同是
1是惯用的,2是反模式。尽可能使用值语义。其余部分使用智能指针。 no naked new