我不明白什麼標準需要做與調用運營商刪除void * == nullptr。運算符刪除標準行爲
事情是這樣的:
void foo(void* ptr) // ptr == nullptr here
{
delete ptr;
}
,一方面,我們在標準以下語句:
ISO/IEC 14882:2011
5.3.5刪除[EXPR .delete]
1 ...操作數應該有一個指向obj的指針ect類型或類型 具有單個非顯式轉換函數(12.3.2)到對象類型的指針 。結果類型void.78
78)這意味着一個對象不能使用 void *類型的指針,因爲空隙不是一個對象類型被刪除。
它使刪除void *格式不正確的代碼。在另一方面,我們在刪除有關nullptr另一份聲明:
ISO/IEC 14882:2011
5.3.5刪除[expr.delete]
2 ...在第一替代(刪除對象), 刪除操作數的值可以是空指針值,指向由前一個新表達式創建的非數組對象的指針,或指向 子對象( 1.8)表示一個基類這樣一個對象(條款 10)。如果不是,則行爲未定義。在第二個替代方案 (刪除陣列),中,刪除操作數的值可能爲空 指針值或由前一個數組產生的指針值 new-expression如果不是,則行爲未定義。
在這種情況下需要做什麼?
矛盾在哪裏?你可以刪除'NULL'或非''void *'的東西。 – cnicutar 2013-02-22 04:06:50
@cnicutar我爲我的問題添加了一個示例 – FrozenHeart 2013-02-22 04:10:13
nullptr的類型不是void *,它是std :: nullptr_t,它可以隱式轉換爲任何指針類型。這遠不是'void *'。 – 2013-02-22 04:12:55