C++分配标准?

C++ allocation standard?

本文关键字:标准 分配 C++      更新时间:2023-10-16

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

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

这是否意味着 a 不一定不会在主内存中分配? 或者这是否取决于编译器,因此编译器可能会分配内存并产生与我们编写相同的结果Foo* a=new Foo

Foo a();是一个函数声明。它应该是Foo a的;a在堆栈的内存中。

您要查找的术语是一个自动变量。这意味着该变量中包含的对象保证在作用域结束时自动销毁。

使用new

时,仅当您显式delete对象(或通过显式使用负责销毁对象的机制,如智能指针)时,才会销毁对象。换句话说,生存期是手动管理的。

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

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

当然,如果类Foo包含一个构造函数,它本身可以调用new和各种其他函数,这些函数可能会也可能不会改变内存的使用......