c++ - 用户定义类对象的堆栈分配

标签 c++

我试图了解 POD 类型以及它们是如何在堆栈上分配和初始化的。 给定

class A {
public:
  A();
  int x;
};

class B {
public:
    int x;
};

int func()
{
    A a;
    B b;
}

我说 b 在 a 之后分配但在 a 之前初始化是否正确?我的意思是 空间是按照声明的顺序为 a 和 b 分配的,但是 b 是初始化的 何时分配空间并在声明时初始化 a?

我在此处阅读了关于 POD 和聚合的非常好的常见问题解答 What are Aggregates and PODs and how/why are they special?

他说的其中一件事是: 非 POD 类类型的对象的生命周期从构造函数完成时开始,到析构函数完成时结束。对于 POD 类,生命周期从对象的存储空间被占用时开始,到该存储空间被释放或重新使用时结束。

所以我正在尝试了解 POD 如何分配和初始化的细节以及它是如何进行的 不同于非 POD。

最佳答案

没有。 a 首先分配和初始化,b 然后分配和初始化。 C++ 程序是逐条语句执行的。由于内存是自动的,因此无论如何都不会发生显式分配——一切都是自动处理的。

(例如,在桌面操作系统上使用的典型调用堆栈实现中,内存一直存在,根本不需要分配,只需寻址即可。)

关于c++ - 用户定义类对象的堆栈分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17174145/

相关文章:

c++ - 在 std::map 中使用 'auto'

c++ - 显式标记所有 C++ 构造函数有什么缺点吗?

c++ - 为什么我总是得到带有默认参数的对象?

c++ - Boost asio async_write 回调不会被调用

C++ 验证 - 截断设置为下一个输入

C++11统一初始化和函数重载

c++ - 多线程:我需要用只读方法保护我的变量吗?

c++ - 声明静态成员而不定义

c++ - boost ptr_vector 迭代器

c++ - 将可见帧缓冲区读取到像素缓冲区对象