読者です 読者をやめる 読者になる 読者になる

C++14 サイズ付きのデアロケーション

C++

C++14では、operator deleteに、サイズが渡されるバージョンが追加されます。

これにより、置き換え可能なoperator newとoperator deleteの一覧は、以下のようになります。

operator new(std::size_t)
operator new(std::size_t, const std::nothrow_t&)
operator new[](std::size_t)
operator new[](std::size_t, const std::nothrow_t&)
operator delete(void*)
operator delete(void*, const std::nothrow_t&)
operator delete[](void*)
operator delete[](void*, const std::nothrow_t&)
operator delete(void*, std::size_t)                          // 追加
operator delete(void*, std::size_t, const std::nothrow_t&)   // 追加
operator delete[](void*, std::size_t)                        // 追加
operator delete[](void*, std::size_t, const std::nothrow_t&) // 追加

追加分の詳細なシグニチャ

void operator delete(void* ptr, std::size_t size) noexcept;
void operator delete(void* ptr, std::size_t size,
                     const std::nothrow_t&) noexcept;

void operator delete[](void* ptr, std::size_t size) noexcept;
void operator delete[](void* ptr, std::size_t size,
                       const std::nothrow_t&) noexcept;

これらのオーバーロードは、メモリアロケータ(メモリプール)を作る際の、パフォーマンス向上のために必要となります。
GoogleのTCMallocは、これがあるとパフォーマンスが大幅に向上するそうです。


参照:
N3778 C++ Sized Deallocation