возврат ссылки на локальную переменную
От: overt Ниоткуда  
Дата: 25.06.08 07:52
Оценка:
Начал читать Джеффа Элджера "С++", дошел до перегрузок и запутался в понятиях. Там есть такой пример, цитирую:


Перегрузка операторов в форме внешних функций
Чтобы перегрузить оператор в форме внешней функции, необходимо определить глобальную
функцию.


class String {
    friend String& operator+(const String&, const String&);
private:
    char* s;
public:
    // Конструкторы и т.д.
}
String& operator+(const String& s1, const String& s2)
{
    char* s = new char[strlen(s1.s) + strlen(s2.s) + 1];
    strcat(s, s1.s, s2.s);
    String newStr(s);
    delete s;
    return newStr;
}
String s1 = “Hello”;
String s2 = “Goodbye”;
String s3 = s1 + s2;


то, что ф-ия strcat() выглядит необычно — это не столь важно, возможно это такое сокращение, но вовзрат ссылки return newStr; ввел меня в сомение, т.к. считал, что этого делать нельзя?! Это не единственный пример в книге с возвратом ссылки на внутреннюю перменную, не мог же он столько раз "ошибиться"?
(MS VS 7.1/8.0)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.