Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 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 вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перейти по ссылке (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