我对C ++中的delete []运算符感到困惑。我知道释放动态内存(堆)的目的是。但是我在下面尝试了这段代码,发现了一些麻烦:
int *dynArrOne = new int[10];
int *dynArrTwo = nullptr;
因此,它将在堆栈中通过指针dynArrOne在堆中创建10个新地址。然后我写道:
int *dynArrOne = new int[10];
int *dynArrTwo = dynArrOne;
因此dynArrTwo和dynArrOne现在指向堆中的相同地址。如果我写:delete [] dynArrOne;
,则会释放堆中的内存。麻烦的是,我无法通过dynArrTwo:delete [] dynArrTwo
释放堆中的内存。我的意思是,为什么会这样?为什么我不能通过dynArrTwo在堆中释放内存?
当您创建指针的copy时,这就是您正在做的[[all-您正在not复制指向的内存的副本。
因此,您的语句int *dynArrTwo = dynArrOne;
只是复制存储在RHS指针中的地址
。当通过delete[]
操作释放任一变量所指向的内存时,两个指针都将变为无效。这样想:我可以在两张纸上写下房子的地址(same
地址,same房子),然后每张纸给两个不同拆除人员。如果这些拆迁人员中的第一个去拆房,那么第二个就不能,以后再去做-他可以吗?