簡體   English   中英

如果我們將一個動態分配的指針分配給另一個指針,會發生什么?

[英]If we assign a dynamically allocated pointer to another pointer, what happens?

#include <iostream>
using namespace std;

int main()
{
    int* A = new int[2];
    A[0] = 10000;
    A[1] = 2;
    int*B = A;
    delete B;
    cout << B << A;
}

找到上面的代碼, delete B; 刪除數組 A 的數據。我們可以通過釋放另一個分配的指針來刪除分配的 memory 嗎?

你不刪除指針。 你刪除指向的東西

A ,在您的示例中不是數組。 它是一個指向數組第一個元素的指針。 當你寫int* B = A; ,你使B成為指向同一個 memory 的指針。此時AB是相同的,並且它們指向的數組可以通過它們中的任何一個釋放。

復制指針多少次並不重要。 重要的是你傳遞給刪除表達式的指針指向的東西是用相應的分配表達式分配的(即new / deletenew[] / delete[]malloc / free等)。

我們可以通過釋放另一個分配的指針來刪除分配的 memory 嗎?

是的,只要您正確執行,即使用適當的delete-expression

來自new.delete.single-12

要求: ptr應該是一個 null 指針,或者它的值應該代表一個 memory 的塊的地址,該塊由之前調用(可能被替換) operator new(std::size_t)operator new(std::size_t, std::align_val_t)尚未因對operator delete的干預調用而失效。

這意味着在你的程序中,我們可以這樣寫:

delete [] B;

另一方面delete B; 是不正確的,因為我們必須在這里使用數組形式的delete-expression

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM