Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2008, 14:30   #1
gladov
Новичок
Джуниор
 
Регистрация: 23.06.2008
Сообщений: 2
По умолчанию Возврат результата функции по ссылке

Здравствуйте.

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

Код:
String& String::operator+(const String& s1) const
{
    char* s2 = new char[strlen((char*)s1.s) + strlen(s) + 1];
    strcat(s2, (char*)s1.s, s);
    String newStr(s2);
    delete s2;
    return newStr;
}
Тут после слияния строк создается новый объект newStr, который, как я правильно понимаю, создается в СТЕКЕ. Потом функция возвращает ссылку на этот объект, но сам объект newStr удалится на выходе из функции (он же стековый ), как следствие, вызовется его деструктор, который удалит саму строку из кучи.
Я не понимаю, как такая конструкция будет работать. Объясните, плз.

ЗЫ: пример взят из книги C++ for Real Programmers, Jeff Alger, стр. 48, но подобные реализации базовых операций встречал не раз.
gladov вне форума Ответить с цитированием
Старый 23.06.2008, 20:01   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Никогда не видел, чтобы operator+ возвращал по ссылке. operator+= - другое дело, возвращает по ссылке this, а +, - и т.п. возвращают объект, к тому же const. А такая конструкция может будет работать, а может - нет. Зависит от реализации и сопутствующих факторов, при компиляции это warning - "returning address of local variable or temporary".
B_N вне форума Ответить с цитированием
Старый 24.06.2008, 22:48   #3
gladov
Новичок
Джуниор
 
Регистрация: 23.06.2008
Сообщений: 2
По умолчанию

Понятно, спасибо за объяснение. Видимо это все же ляпа в книге.
gladov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перейти по ссылке (URL) Avron Общие вопросы Delphi 3 22.12.2008 16:56
Переход по ссылке в Webbrowser1 aesoem Работа с сетью в Delphi 6 15.07.2008 22:10
Возврат коретки Михаил Юрьевич Общие вопросы Delphi 4 03.07.2008 20:36
сохранение результата запроса в таблицу БД stepchild БД в Delphi 11 13.06.2008 11:20
Вывод результата по столбцам Mary_star SQL, базы данных 4 03.03.2008 13:15