这个问题听起来可能有点奇怪,但我从来没有完全理解为什么我们需要有两种不同的语法来删除C++中的动态分配内存?
例如,
int *p = new int[10];
delete[] p; // why not just delete p;?
在普通的老C中,您只需使用free函数来释放分配给指针的内存,而不管分配的元素数量如何。当然,C++要复杂一些,因为它允许类类型调用它们的析构函数等等。但是,我认为使用单一语法删除C++中动态分配的内存没有任何障碍。
有什么根本原因决定使用两个版本,delete和delete[]?
更重要的是,如果您使用delete而不是delete[],大多数编译器甚至都
可能重复:
这是常量大小为4的简单数组的定义,它存储在堆栈内存中:
int array[4];
现在,如果我想在堆栈中声明动态大小的数组,似乎应该编写以下代码:
int n;
cin >> n;
int array[n];
但是,正如我们所知道的,这在C++中是不允许的,我们可以编写这个,它将在动态内存(即堆)中创建数组:
int n;
cin >> n;
int *array = new int[n];
但是这要慢得多,而且(因为使用了新的运算符),需要在我们完成数组的工作之后调用delete []操作符。
所以我的问题是:
为什么C++不允许在堆栈内存中创建动
auto array = new Foo[100];
我的第一个问题是,内部情况如何?我的假设是:
如果Foo是类,则数组是foo对象vector<Foo*> v //c++指针数组的指针。
如果Foo是一个结构,那么数组是一个指向Foo对象数组的指针。vector<Foo> v //c++
D中的动态数组在内存中是否像在C++中一样连续?
我是C++的新手。我试着理解C++中的内存管理,并使用指针。我有一个关于动态数组的问题。
//This is the part of my code:
int *ptr;
ptr = new int[3];
ptr[0] = 1;
ptr[1] = 2;
ptr[2] = 3;
// Normally I would think I cannot add further elements to the array, but it is possible
ptr[3] = 4;
ptr[4] = 5;
ptr[5] = ...
所以,我的问题是,当我用size =3初始化array的大小时,为
我已经开始学习c++了。我读到,数组的大小只能在运行前设置,动态数组可以在运行时设置。所以我原以为这会失败,但事实并非如此:
#include <iostream>
int main() {
using namespace std;
int size;
cout << "enter array size:";
cin >> size;
int i, score[size], max; //array size set to variable doesn't fail
cout <
我刚开始学习C++。
我必须声明一个方法,它将接受这样的变量:
int grid1[200][200];
int grid2[20][25];
int grid3[53][40];
如何在方法中声明该参数?
我已经找到了这个声明,但我不知道它是否有用,或者我如何使用它:
int** a = new int*[rowCount];
我将把这个参数复制到一个动态的成员变量中(我认为它会在堆中,所以这就是为什么它是动态的)。
我正在复习C++的考试,只是为了更好地理解这门语言。我的理解是,c++中的数组在运行前或动态定义为固定长度。知道了这一点,我不明白为什么C++会接受这一点。我不认为将元素添加到长度为0的数组是可能的;
int * TestArray = new int[0];
TestArray[0]=10;
TestArray[1]=20;
TestArray[2]=30;