Правила программирования на Си и Си++



         

123. Не возвращайте ссылки на память, выделенную оператором new - часть 2


some_class x;             // конструктор по умолчанию

some_class y = x;      // конструктор копии

но кроме этого он используется и неявно в двух ситуациях. Первой является вызов по значению:

some_class x;

f( some_class x ) // передается по значению, а не по ссылке.

f( x );       // вызывается конструктор копии для передачи x

              // по значению. Оно должно скопироваться в стек.

Второй является возврат по значению:

some_class g() // Помните, что x

- локальная, автоматическая

               // переменная.Она исчезает после возвращения

               // функцией значения.

{

   some_class x; // Оператор return после этого должен

   return x;     // скопировать x куда-нибудь в надежное место

}                // (обычно в стек после аргументов).Он

                 // использует для этой цели конструктор копии.

Генерируемая компилятором функция-операция operator=()

нужна лишь для поддержки копирования структур в стиле Си там, где не определена операция присваивания.




Содержание  Назад  Вперед