Нет необходимости в области действия:
std::queue<int>().swap(foo);
, но в противном случае ваш код действителен.
Здесь мы создаем временную пустую очередь.Затем мы меняем его состояние на очередь с большим количеством состояний;поэтому foo
не имеет состояния, временная очередь имеет старое состояние foo
.
Затем в конце оператора мы уничтожаем временную очередь вместе со старым состоянием foo
.
Существует также краткий, который работает практически со всеми типами:
template<class T>
void clear( T& t ) {
using std::swap;
swap( static_cast<T&>(T()), t );
}
, который не является обычными старыми данными.Обнаружение случаев, когда вместо этого мы хотели бы инициализировать нулями T
, довольно сложно.
Объекты, которые не могут быть построены по умолчанию ()
, не смогут скомпилироваться здесь.