зеркало из https://github.com/microsoft/STL.git
<memory>: Guard aligned allocation with __cpp_aligned_new (#1689)
This commit is contained in:
Родитель
6dd9e24d04
Коммит
9c79c21772
|
@ -2084,20 +2084,26 @@ template <class _Refc>
|
|||
_NODISCARD _Refc* _Allocate_flexible_array(const size_t _Count) {
|
||||
const size_t _Bytes = _Calculate_bytes_for_flexible_array<_Refc, _Check_overflow::_Yes>(_Count);
|
||||
constexpr size_t _Align = alignof(_Refc);
|
||||
if constexpr (_Align <= __STDCPP_DEFAULT_NEW_ALIGNMENT__) {
|
||||
return static_cast<_Refc*>(::operator new(_Bytes));
|
||||
} else {
|
||||
#ifdef __cpp_aligned_new
|
||||
if constexpr (_Align > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {
|
||||
return static_cast<_Refc*>(::operator new (_Bytes, align_val_t{_Align}));
|
||||
} else
|
||||
#endif // __cpp_aligned_new
|
||||
{
|
||||
return static_cast<_Refc*>(::operator new(_Bytes));
|
||||
}
|
||||
}
|
||||
|
||||
template <class _Refc>
|
||||
void _Deallocate_flexible_array(_Refc* const _Ptr) noexcept {
|
||||
constexpr size_t _Align = alignof(_Refc);
|
||||
if constexpr (_Align <= __STDCPP_DEFAULT_NEW_ALIGNMENT__) {
|
||||
::operator delete(static_cast<void*>(_Ptr));
|
||||
} else {
|
||||
#ifdef __cpp_aligned_new
|
||||
if constexpr (_Align > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {
|
||||
::operator delete (static_cast<void*>(_Ptr), align_val_t{_Align});
|
||||
} else
|
||||
#endif // __cpp_aligned_new
|
||||
{
|
||||
::operator delete(static_cast<void*>(_Ptr));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче