Требуется ли уничтожение перемещенных объектов?

Если я перемещаю-конструирую a из b , нужно ли разрушить b , или я могу уйти, не делая этого?

Этот вопрос пришел мне в голову во время реализации необязательного шаблона . Выдержка:

~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!
    }
}

Конечно, я мог бы просто заменить bool initialized на трехзначное перечисление, которое различает инициализированные, неинициализированные и перемещенные. Я просто хочу знать, действительно ли это необходимо.

10
задан fredoverflow 4 August 2011 в 15:05
поделиться