Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Разъясните ситуацию с возвратом объекта или ссылки на объект - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Присвоение переменной а значения случайного числа (random) http://www.cyberforum.ru/cpp-beginners/thread1494753.html
Здравствуйте. Задача написать программу для проверки знания таблиц умножения. Rand-омом виводятся два числа (a,b) на консоль. Как присвоить переменной а и переменной b значения, которие вивел random?
C++ Вычисление разницы дат Имеется код: char firstDate = "2015-07-09"; char secondDate = "2015-07-07"; char* format = "%Y-%m-%d"; struct tm tm; strptime(firstDate, format, &tm); // приводим строку к структуре времени... http://www.cyberforum.ru/cpp-beginners/thread1494732.html
C++ Проверка на существование элемента по ключу. Линейные списки
Собственно вроде все работает, только не получается сделать, чтобы при добавлении нового элемента делалась проверка по номеру, к примеру если такой уже есть в списке, то писать об этом, и начать...
Деревья (добавление, удаление и вывод элементов) C++
Задача - реализовать дерево на С++, чтобы была возможность добавлять елементы, удалять их оттуда и выводить. Программа запускается и сразу возникает ошибка. Можете подсказать, в чем проблема? Делаю...
C++ Отдельно класс данных, класс формул и главный класс http://www.cyberforum.ru/cpp-beginners/thread1494699.html
Здравствуйте! У меня есть три вопроса. Первый вопрос. Скажите пожалуйста! Правильный ли это подход к созданию приложений : отдельный класс в котором хранятся все данные, отдельный класс с...
C++ Определение размера char** argv Есть массив строк char** argv где я знаю число строк argc for (int i = 0; i < argc; i++){ printf("%s \n",argv); } char** newargv; Как скопировать argv с помощью memcpy ( &newargv,... подробнее

Показать сообщение отдельно
DrOffset
7134 / 4275 / 963
Регистрация: 30.01.2014
Сообщений: 7,064
07.07.2015, 22:29
Цитата Сообщение от myxolod Посмотреть сообщение
как я лично понял что он делает ссылку на локальный объект который уничтожается после выхода из конструктора, так ли это
Так. Только тут не просто локальный объект, а временный объект и он уничтожится в конце выражения return.
Более того, если бы компилятор в данном вопросе придерживался правил С++, а не собственных расширений, то вообще не позволил бы скомпилировать этот код.
Вот аналогичный пример в gcc: http://rextester.com/LHRK19536 и он обоснованно не компилируется.

Цитата Сообщение от myxolod Посмотреть сообщение
нюанс использования ссылок в возврате
Никаких нюансов тут нет. Нужно просто иметь представление сколько живут объекты в программе. Если мы сохраняем ссылку на объект, время жизни которого меньше, чем требуется, то при доступе посредством этой ссылки получаем закономерные спецэффекты (или, что более страшно, отсутствие таковых). Дело здесь не в возврате, а именно в понимании времени жизни своих объектов.
Вот похожий пример без всяких функций.
C++
1
2
3
4
5
6
   int * p;
   {
        int v = 2;
        p = &v;
   }
   std::cout << *p;
Хоть в данном случае, вероятнее всего, ничего страшного не будет заметно, но все-таки этот код некорректен, потому что переменная v уже мертва. А вывод, используя указатель, здесь есть ни что иное как некромантия. А некромантия, как известно, прилично выглядит только если труп еще свежий. Пройди чуть больше времени, и зрелище уже будет не столь приятным.
Надеюсь метафора понятна.
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru