C ++分配标准?

时间:2015-05-17 18:10:13

标签: c++

我们假设我有一个类Foo和一个函数Bar

void Bar(void)
{
Foo a();
}

这是否意味着必须在主存中分配一个必须的? 或者这取决于编译器,因此编译器可能会分配内存并导致与编写Foo* a=new Foo

相同的内容

3 个答案:

答案 0 :(得分:2)

Foo a();是一个函数声明。它应该是Foo a;并且a在堆栈的记忆中。

答案 1 :(得分:1)

您正在寻找的术语是自动变量。这意味着该变量中包含的对象保证在范围自动的末尾被销毁。

当你使用new时,只有当你delete显式地(或者通过明确地使用一种负责破坏它的机制,如智能指针)时,对象才会被销毁。换句话说,生命周期是手动管理。

当然,自动生命周期语义在任何情况下都与手动语义不同。话虽这么说,两种情况下的存储位置(堆栈,堆,寄存器或其他东西)都无关紧要。

答案 2 :(得分:0)

从技术上讲,如果a适合寄存器,它最终可能会使用“无记忆”。否则,它将被分配在堆栈中,我将其称为“主内存”,与Foo *a = new Foo;相同的内存,但不同的部分[new使用堆内存,堆栈不是与堆相同,但内存相同。

当然,如果类Foo包含构造函数,它本身可以调用new以及可能会或可能不会改变内存使用的所有其他函数......