Разве деструкторы не должны вызываться при возврате этого объекта (не как указатель)? - PullRequest
4 голосов
/ 21 февраля 2010

У меня есть функция:

static Bwah boo(){
   Bwah bwah;
   return bwah;
}

И основная функция:

int main(){
   Bwah boo = Assigner::boo();
   cout << "got here.." << endl;
}

Деструктор Bwah вызывается только один раз, после печати "сюда" Это гарантировано или это оптимизация компилятора?

1 Ответ

10 голосов
/ 21 февраля 2010

Это оптимизация называется Оптимизация возвращаемой стоимости (RVO). Это обычная оптимизация, но на нее нельзя положиться.

Вот две действительно отличные ссылки для получения дополнительной информации:

  1. Во-первых, действительно подробная статья о передаче по значению, семантике rvalue, оптимизации возвращаемого значения, ссылках на rvalue и конструкторе перемещения и операторе присваивания в C ++ 0x
  2. Во-вторых, старые добрые резервные Википедии и их запись об оптимизации возвращаемого значения .

В частности, статья в Википедии непосредственно касается вашего вопроса. Но другая статья более подробно описывает весь вопрос.

...