63 votes

Pourquoi n'y a-t-il pas de std :: construct_at dans C ++ 17?

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);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X