Временные объекты
В некоторых случаях требуется для компилятора создания временных объектов.Эти временные объекты могут быть созданы для следующих причин:
Инициализация a const ссылка с инициализатором типа отличающегося от из базового типа инициализируемые ссылки.
Хранение возвращаемым значением функции, возвращающей пользовательский тип.Эти temporaries создаются, только если программа не копирует возвращаемое значение к объекту.Примеры.
UDT Func1(); // Declare a function that returns a user-defined // type. ... Func1(); // Call Func1, but discard return value. // A temporary object is created to store the return // value.
Так как возвращаемое значение не копируются на другой объект, временный объект создается.Наиболее распространенным случаем, когда temporaries создаются во время оценки выражения, когда перегруженные функции операторов должны вызываться.Эти перегруженные функции операторов возвращают пользовательский тип, часто не копируется в другой объект.
Рассмотрим выражение ComplexResult = Complex1 + Complex2 + Complex3.выражение Complex1 + Complex2 вычисляет и результат сохраняется во временном объекте.Затем выражение временно + Complex3 оценивает, а результат копируется в ComplexResult (с учетом оператор присваивания не перегружает).
Сохранить результат приведения к пользовательскому типу.Если объект данного типа явно преобразован к пользовательскому типу, этот новый объект создан как временный объект.
Временные объекты имеют время существования, определяемое их точкой создания и точкой в котором они уничтожены.Любое выражение, которое создает более чем один временный объект, наконец, удаляет их в обратном порядке, в котором они были созданы.Точки, в которых происходит разрушение приведены в следующей таблице.
Указывает удаления для временных объектов
Создается временное причины |
Укажите удаления |
---|---|
результат оценки выражений |
Все temporaries, созданные в результате оценки выражений уничтожаются в конце выписки выражения (то есть на точку с запятой) или в конце выражений для наблюдения for" if" while" doи switch выписки. |
Инициализация const Ссылки |
Если инициализатор не является левостороннее того же типа, что и, инициализированной ссылке, временное базового типа объекта, создают и инициализируют с выражением инициализации.Этот временный объект будет уничтожен сразу после объект ссылки, с которым он привязан удален. |