Согласно примечаниям cppreference для
Код: Выделить всё
std::to_address()Код: Выделить всё
std::addressof()std::to_address can be used even when
Код: Выделить всё
pКод: Выделить всё
std::addressof(*p)Код: Выделить всё
std::addressofBut in this code in the standard library:
Код: Выделить всё
// https://github.com/llvm/llvm-project/blob/main/libcxx/include/__memory/shared_ptr.h
template = 0>
_LIBCPP_HIDE_FROM_ABI shared_ptr allocate_shared(const _Alloc& __a, _Args&&... __args) {
using _ControlBlock = __shared_ptr_emplace;
using _ControlBlockAllocator = typename __allocator_traits_rebind::type;
__allocation_guard __guard(__a, 1);
::new ((void*)std::addressof(*__guard.__get())) _ControlBlock(__a, std::forward(__args)...);
auto __control_block = __guard.__release_ptr();
return shared_ptr::__create_with_control_block(
(*__control_block).__get_elem(), std::addressof(*__control_block));
}
Код: Выделить всё
placement newКод: Выделить всё
__guard.__get()Код: Выделить всё
std::addressof(*__guard.__get())Источник: https://stackoverflow.com/questions/781 ... bject-that
Мобильная версия