Допустим, я определил функцию zero_initialize():
template<class T>
T zero_initialize()
{
T result;
std::memset(&result, 0, sizeof(result));
return result;
}
// usage: auto data = zero_initialize<Data>();
Вызов zero_initialize() для некоторых типов приведет к неопределенному поведению 1,2. В настоящее время я std::is_pod T для проверки std::is_pod. С учетом того, что эта черта устарела в C++ 20, и появления концепций, мне любопытно, как должен развиваться zero_initialize().
- Какая (минимальная) черта/концепция может гарантировать правильную настройку объекта?
- Должен ли я использовать
std::uninitialized_fillвместоstd::memset? И почему? - Является ли эта функция устаревшей одним из синтаксисов инициализации C++ для подмножества типов? Или это будет с выходом будущих версий C++?
1)Стереть всех членов класса.
2)Что может быть причиной "неопределенного поведения" при использовании memset в классе библиотеки (std :: string)? [закрыто]