簡體   English   中英

刪除函數指針數組?

[英]Deleting an array of pointers to functions?

以下是我從MSDN中復制的關於new運算符的內容:

new運算符不能用於分配函數,但可用於分配函數指針。 下面的示例分配然后釋放七個指向返回整數的函數的數組的數組。

 int (**p) () = new (int (*[7]) ()); delete *p; 

好吧,第一行沒有什么奇怪的,它為函數分配了一個指針數組,但我只是不明白第二行如何刪除該數組? 我認為它應該是:

delete[] *p;

有誰能解釋一下?

坦率地說,正確的答案寫在avakar的評論中。 正確的代碼是

delete[] p;

delete *p; 有兩個原因是不正確的:

  1. 我們必須對所有動態分配的數組使用delete[] 使用delete將導致未定義的行為。
  2. 無法刪除指向靜態和成員函數的指針

如果我們添加一個typedef,

typedef int (*FPtr)();

new聲明可以改寫為

FPtr *p = new FPtr[7];

所以很明顯資源應該隨之發布

delete[] p;

正如別人所解釋的那樣


順便說一下,VS 2008及以上的MSDN頁面確實使用了正確的代碼。

int (**p) () = new (int (*[7]) ());
delete [] p;

暫無
暫無

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

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