Допустим, я определил функцию 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)? [закрыто]