выполнить эту обязанность (т.е. в этом случае в операторе if).
я двигаюсь-конструируюa
изb
это все ещенеобходимо разрушатьb
или я могу уйти без этого?
Этот вопрос приходил мне в голову во время реализацииoptional<T>
шаблон. Выдержка:
~optional()
{
if (initialized)
{
reinterpret_cast<T*>(data)->~T();
}
}
optional(optional&& o) : initialized(o.initialized)
{
if (initialized)
{
new(data) T(std::move(*o)); // move from o.data
o.initialized = false; // o.data won't be destructed anymore!
}
}
Конечно, я мог бы просто заменить булinitialized
с трехзначным перечислением, которое различает инициализированный, неинициализированный и перемещенный из. Я просто хочу знать, если это строго необходимо.