[英]Deleting an array of pointers to functions?
以下是我從MSDN中復制的關於new
運算符的內容:
new
運算符不能用於分配函數,但可用於分配函數指針。 下面的示例分配然后釋放七個指向返回整數的函數的數組的數組。int (**p) () = new (int (*[7]) ()); delete *p;
好吧,第一行沒有什么奇怪的,它為函數分配了一個指針數組,但我只是不明白第二行如何刪除該數組? 我認為它應該是:
delete[] *p;
有誰能解釋一下?
坦率地說,正確的答案寫在avakar的評論中。 正確的代碼是
delete[] p;
delete *p;
有兩個原因是不正確的:
delete[]
。 使用delete
將導致未定義的行為。 如果我們添加一個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.