共用方式為


/Zc:sizedDealloc (啟用調整大小後的全域解除配置函式)

/Zc:sizedDealloc 編譯器選項會告訴編譯器,在物件的大小可用時,優先呼叫具有類型 size_t 第二個參數的全域 operator deleteoperator delete[] 函式。 這些函式可能會使用 size_t 參數來優化解除配置器效能。

語法

/Zc:sizedDealloc [ - ]

備註

在 C++11 標準中,您可以定義靜態成員函 operator delete 式,並 operator delete[] 採用第二個參數 size_t 。 這些通常會與 運算子新 函式搭配使用,為 物件實作更有效率的配置器和解除配置器。 不過,C++11 並未在全域範圍定義一組對等的解除配置函式。 在 C++11 中,具有類型 size_t 第二個參數的全域解除配置函式會被視為放置刪除函式。 必須藉由傳遞 size 引數來明確呼叫它們。

C++14 標準會變更編譯器的行為。 當您定義全域 operator deleteoperator 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 開發環境中設定這個編譯器選項

  1. 開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性

  2. 從 [ 組態 ] 下拉式功能表中,選擇 [ 所有組態 ]。

  3. 選取 [組態屬性]>[C/C++]>[命令列] 屬性頁。

  4. 修改 [其他選項] 屬性以包含 /Zc:sizedDealloc /Zc:sizedDealloc- ,然後選擇 [ 確定 ]。

另請參閱

MSVC 編譯器選項
MSVC 編譯器命令列語法
/Zc (一致性)