使用'equal to'符号初始化期间的内存

Memory during Initializing using 'equal to' sign

本文关键字:内存 to equal 使用 符号 初始化      更新时间:2023-10-16

我正在尝试了解特定类型初始化中使用的内存。下面是该问题的示例:

#include <iostream>
using namespace std;
class Example {
int n;
public:
Example(int number = 0)
{
n = number;
}
};
int main() {
Example *obj1 = new Example(1); //dynamic allocation - 1 instance is created and the object pointer points to the address
Example obj2(2); // automatic allocation - a single instance of the object is created with the given value
Example obj3 = Example(3); //automatic allocation - with copy constructor from an object initialized with a the class constructor
delete obj1; //de-allocating dynamically allocate memory
}

我有兴趣了解obj3是如何实例化的。使用等号是否意味着我们在这里使用复制构造函数?如果是这样,Example(3)是一个单独的实例(它的范围是什么)?

如果它们是单独的实例,那么obj2初始化似乎更加优化,不是吗?

编辑:修复了不正确术语的使用 - 静态到自动

我很想知道obj3是如何被实例化的。使用等号是否意味着我们在这里使用复制构造函数?如果是这样,示例 (3) 是一个单独的实例(它的范围是什么)?

此表达式称为复制初始化,您的情况obj3在此处描述:

首先,如果 T 是一个类类型,并且初始值设定项

是一个 prvalue 表达式,其 cv-unqualified 类型与 T 是同一个类,则使用初始值设定项表达式本身(而不是从它具体化的临时实例化)来初始化目标对象:请参阅 copy elision (自 C++17 起)

因此,不涉及复制 ctor,并且直接初始化obj3(将 3 传递给其 ctor)以用于当前标准。在可以创建 C++17 之前,临时的,但很可能被优化器消除。

注意:您在注释中错误地指出自动变量使用静态内存分配。请在此处查看详细信息 静态内存分配和动态内存分配之间的区别