簡體   English   中英

如何從精確索引處的動態指針數組中刪除指針?

[英]How to delete pointer from a dynamic array of pointers at an exact index?

當我們手頭有動態指針數組時,假設我們要刪除該數組的第三個索引並將較高的指針復制到一個槽中。

Q1:我們需要刪除第三個元素嗎?

Q2:刪除 aPtr[3] 並將新指針分配給 aPtr[3] 后會發生什么

代碼部分是否做了我想做的事情?

'''

A **aPtr = new A*[10];

for(int i=0; i< 10; i++)
{
    aPtr[i] = new A;
}

delete aPtr[3];

for(int i=3; i<9; i++)
{
    aPtr[i] = aPtr[i+1];
}

'''

另一個問題與前一個無關。 當我們要刪除指針數組中的所有元素時,就是語句“delete[]aPtr;” 還需要嗎?

'''

A **aPtr = new A*[10];

for(int i=0; i< 10; i++)
{
    aPtr[i] = new A;
}


for(int i=0; i<10; i++)
{
    delete aPtr[i];
}

delete[] aPtr; //<-----Is this line required to free the memory?

'''

除了一個例外,您的代碼看起來不錯。

delete aPtr[3];

for(int i=3; i<9; i++)
{
    aPtr[i] = aPtr[i+1];
}

添加這個:

aPtr[9] = nullptr;

否則 aPtr[8] 和 aPtr[9] 都指向同一個地方,稍后當你刪除整個東西時,你會雙重刪除那個指針。

否則,它看起來不錯。

暫無
暫無

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

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