了解基本的动态分配示例
Understanding basic dynamic allocation example
我有一个关于动态分配的非常基本的 doute。按照可能的语法研究树,有人说它们都是动态分配。
第一:
int* px(nullptr);
px = new int;
*px =20;
然后是一个更简洁的:
int* px(nullptr);
px = new int(20);
甚至:
int*px(new int(20));
然后,在同样的解释中,我被告知第三种情况实际上是静态分配。比我糊涂了。
这是真的吗?有人可以解释一下为什么吗?
非常感谢。
你的第一个例子:
int* px(nullptr);
px = new int;
*px =20;
第一行创建一个堆栈分配指针,并为其分配值"nullptr"。第二行创建一个在堆上分配的整数,并将 px 分配给该整数的指针。最后一行取消引用 px 并将 20 分配给堆值。
在第二个示例中:
int* px(nullptr);
px = new int(20);
第二行创建一个在堆上分配的 int,值为 20,并将其指针分配给 px。
在上一个示例中:
int*px(new int(20));
您正在创建一个值为 20 的堆分配整数,其指针作为参数传回以初始化整数指针 px。它与:
int* px = new int(20);
因此,要回答您的问题,只有包含"new"的行才是动态内存分配。
new= 堆分配,否则它是堆栈分配的,除非您在后台调用使用 new 或 malloc 的函数/运算符。
在所有示例中,您都有静态和动态分配的组合,以及分别驻留在自动和动态内存中的 2 个变量。
从学究上讲,指针px
是一个自动变量,它指向的(*px
)是一个动态分配的变量。
px
在自动超出范围时被销毁,*px
必须明确清除(通过delete px;
)
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 在c++中使用动态分配的问题
- 使用递归模板动态分配的多维数组
- 对具有动态分配的内存和析构函数的类对象的引用
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 访问动态分配列表中的元素
- 为什么 std::equal_to会导致动态分配?
- 调用析构函数以释放动态分配的内存
- 动态分配Q_Property变量
- 在 C++ 中搜索动态分配的数组中的出现次数
- 动态分配的聊天数组打印缺失的数据和空
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 使用动态分配将 char* 复制到另一个字符**
- 使用指针在存在特征库的情况下动态分配 c++ 中的矩阵
- 二维阵列的动态分配
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 在运行时为动态分配的内存输入值
- 通过动态内存分配了解2D数组
- 了解基本的动态分配示例