С++ 17 добавляет std::destroy_at
, но нет аналога std::construct_at
. Это почему? Разве это не может быть реализовано так просто, как показано ниже?
template <typename T, typename... Args>
T* construct_at(void* addr, Args&&... args) {
return new (addr) T(std::forward<Args>(args)...);
}
Что позволило бы избежать этого не совсем естественного размещения нового синтаксиса:
auto ptr = construct_at<int>(buf, 1); // instead of 'auto ptr = new (buf) int(1);'
std::cout << *ptr;
std::destroy_at(ptr);