使用'equal to'符号初始化期间的内存
Memory during Initializing using 'equal to' sign
我正在尝试了解特定类型初始化中使用的内存。下面是该问题的示例:
#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
在此处描述:
是一个 prvalue 表达式,其 cv-unqualified 类型与 T 是同一个类,则使用初始值设定项表达式本身(而不是从它具体化的临时实例化)来初始化目标对象:请参阅 copy elision (自 C++17 起)
因此,不涉及复制 ctor,并且直接初始化obj3
(将 3 传递给其 ctor)以用于当前标准。在可以创建 C++17 之前,临时的,但很可能被优化器消除。
注意:您在注释中错误地指出自动变量使用静态内存分配。请在此处查看详细信息 静态内存分配和动态内存分配之间的区别
相关文章:
- "error: no matching function for call to"构造函数错误
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 调用专用模板时出错"no matching function for call to [...]"
- 是否可以通过C++扩展强制多个python进程共享同一内存
- C++ Singleton - Prevent ::instance() to variable
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 指向对象生存期之外的已分配内存的指针是"invalid pointer[s]"还是"pointer[s] to an object"?
- 使用'equal to'符号初始化期间的内存
- Buffer.BlockCopy Array 2d c++ to C# 共享内存
- 是否必须在内存中"next to each other"两个相邻声明的公共字段?
- 公开简历 |Mat to gpuMat 内存位置的异常
- timer_create "Syscall param timer_create(evp) points to uninitialised byte(s)"内存泄漏问题