内存是分配:堆还是堆栈?

q12*_*26y -1 c++ memory heap stack

#include <iostream>
using namespace std;

struct number
{
    int value;
    int pos;
public:
    number(int a,int b)
    {
        value=a;
        pos=b;
    }
};
int main() {
    // your code goes here
    number(1,2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,在哪里分配内存number(1,2)?在堆或堆栈上?我们如何验证它?

Bat*_*eba 6

除了几个C++标准库函数之外,C++还没有堆栈的概念.

有些人把new堆上分配的东西和在堆栈上分配的所有其他东西等同起来.但static存储和其他零碎的泥泞粗糙的分类.

在您的情况下number(1, 2);是匿名临时和自动存储持续时间.一个好的编译器可能会注意到匿名临时的构造或销毁没有副作用,因此可能会从编译的二进制文件中完全删除它.所以第三种选择 - 根本没有记忆 - 对我来说似乎很可能.