Форум программистов, компьютерный форум 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); // приводим строку к структуре времени time_t fD = mktime(&tm); strptime(secondDate, format, &tm); time_t sD = mktime(&tm); double razn = difftime(fD, sD); //вычисление разницы дат http://www.cyberforum.ru/cpp-beginners/thread1494732.html
C++ Проверка на существование элемента по ключу. Линейные списки
Собственно вроде все работает, только не получается сделать, чтобы при добавлении нового элемента делалась проверка по номеру, к примеру если такой уже есть в списке, то писать об этом, и начать вводить заново, и сделать это все в цикле, мол заполнять список пока пользователь не введет номер 666, тогда выйти из функции. Помогите доделать пожалуйста! #include <iostream> #include <conio.h>...
Деревья (добавление, удаление и вывод элементов) C++
Задача - реализовать дерево на С++, чтобы была возможность добавлять елементы, удалять их оттуда и выводить. Программа запускается и сразу возникает ошибка. Можете подсказать, в чем проблема? Делаю прогу на 6 билдере. #include <iostream> using namespace std; struct Node // { int x; //Запис в дерево Node *l,*r; // };
C++ Отдельно класс данных, класс формул и главный класс http://www.cyberforum.ru/cpp-beginners/thread1494699.html
Здравствуйте! У меня есть три вопроса. Первый вопрос. Скажите пожалуйста! Правильный ли это подход к созданию приложений : отдельный класс в котором хранятся все данные, отдельный класс с формулами(для работы с данными(данные из класса данных)) и отдельно главный класс. Правильная ли это вообще структура приложения ? Второй вопрос. Как сделать лучше класс данных? Я создал 2 класса,...
C++ Определение размера char** argv Есть массив строк char** argv где я знаю число строк argc for (int i = 0; i < argc; i++){ printf("%s \n",argv); } char** newargv; Как скопировать argv с помощью memcpy ( &newargv, &argv, sizeof(newargv) );? sizeof(newargv) вернет мне 4, как я понимаю (размер указателя), как определить размер всего копируемого массива? подробнее

Показать сообщение отдельно
DrOffset
6442 / 3816 / 885
Регистрация: 30.01.2014
Сообщений: 6,611
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 уже мертва. А вывод, используя указатель, здесь есть ни что иное как некромантия. А некромантия, как известно, прилично выглядит только если труп еще свежий. Пройди чуть больше времени, и зрелище уже будет не столь приятным.
Надеюсь метафора понятна.
 
Текущее время: 18:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru