Этот вопрос можно считать продолжением следующего вопроса: Время жизни временной переменной C++.
Контейнеры Qt
поддерживают потоковый
синтаксис инициализации.Теперь, когда я пишу следующий код, мой QVector
уничтожается сразу после присваивания, и ссылка становится оборванной.
const QVector& v = QVector() << "X" << "Y" << "Z";
Соответствующий операторреализован следующим образом:
inline QVector &operator<< (const T &t)
{ append(t); return *this; }
Насколько мне известно, 10.4.10 Temporary Objects
указывает, что время жизни временного объекта продлевается до соответствовать времени жизни соответствующей const
ссылки на него.
Однако в этом случае временный объект QVector
уничтожается раньше.
Я предполагаю, что вероятно это происходит из-за того, что последняя операция возвращает QVector
и ничего не должно знать о времени жизни временного QVector
, но это объяснение не является строгим и может быть неверным.
Итак, почему это происходит?