/Zc:sizedDealloc (啟用調整大小後的全域解除配置函式)
/Zc:sizedDealloc 編譯程式選項會告訴編譯程式,在物件的大小可用時,優先呼叫具有類型size_t
第二個參數的全域operator delete
或operator delete[]
函式。 這些函式可能會使用 size_t
參數來優化解除分配器效能。
語法
/Zc:sizedDealloc[-]
備註
在 C++11 標準中,您可以定義靜態成員函 operator delete
式,並 operator delete[]
採用第二個參數 size_t
。 這些通常會與 運算元新 函式搭配使用,為對象實作更有效率的配置器和解除分配器。 不過,C++11 並未在全域範圍內定義一組對等的解除分配函式。 在 C++11 中,具有類型 size_t
第二個參數的全域解除分配函式會被視為放置刪除函式。 必須藉由傳遞 size 自變數來明確呼叫它們。
C++14 標準會變更編譯程序的行為。 當您定義全域 operator delete
且 operator delete[]
採用 類型 size_t
的第二個參數時,編譯程式偏好在未叫用成員範圍版本且物件大小可用時呼叫這些函式。 編譯程式會隱含傳遞 size 自變數。 當編譯程式無法判斷要解除分配的物件大小時,會呼叫單一自變數版本。 否則,選擇要叫用之解除分配函式版本的一般規則仍適用。 將範圍解析運算子 (::
) 前面加上解除分配函數調用,即可明確指定全域函式的呼叫。
根據預設,從 Visual Studio 2015 開始的 Visual C++會實作此C++14 標準行為。 您可以藉由設定 /Zc:sizedDealloc 編譯程式選項來明確指定此值。 這代表潛在的重大變更。 例如,當您的程式代碼定義使用 類型size_t
第二個參數的放置刪除運算符時,請使用 /Zc:sizedDealloc- 選項來保留舊的行為。 具有類型 size_t
第二個參數之全域解除分配函式的預設Visual Studio連結庫實作會叫用單一參數版本。 如果您的程式代碼只提供單一參數全局運算符 delete 和 operator delete[],全域大小解除分配函式的默認連結庫實作會叫用您的全域函式。
/Zc:sizedDealloc 編譯程式選項預設為開啟。 /permissive- 選項不會影響 /Zc:sizedDealloc。
如需 Visual C++ 中一致性問題的詳細資訊,請參閱 Nonstandard Behavior。
在 Visual Studio 開發環境中設定這個編譯器選項
開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性。
從 [ 組態 ] 下拉功能表中,選擇 [ 所有組態]。
選取 [組態屬性]>[C/C++]>[命令列] 屬性頁。
修改 [其他選項] 屬性以包含 /Zc:sizedDealloc 或 /Zc:sizedDealloc- ,然後選擇 [確定]。