C ++ 17 ajoute std::destroy_at
, mais il n'y a pas d'équivalent std::construct_at
Pourquoi donc? Ne pourrait-il pas être mis en œuvre aussi simplement que ce qui suit?
template <typename T, typename... Args>
T* construct_at(void* addr, Args&&... args) {
return new (addr) T(std::forward<Args>(args)...);
}
Ce qui permettrait d'éviter cette nouvelle syntaxe de placement pas tout à fait naturelle:
auto ptr = construct_at<int>(buf, 1); // instead of 'auto ptr = new (buf) int(1);'
std::cout << *ptr;
std::destroy_at(ptr);