![]() |
|
|
![]()
|
|
| topspin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 3.5.2006 Репутация: нет Всего: нет |
Здравствуйте.
Помогите разобраться со следующей стуацией: AnsiString s1 = "This is s1"; AnsiString s2 = "This is s2"; //Вариант 1 - рабочий... AnsiStringString &rs=(s1+s2); ShowMessage(rs); //Вариант 2 - не рабочий... AnsiString *ps=&(s1+s2); ShowMessage(*ps); Кстати так происходит всегда, если возвращается не ссылка на класс а сам класс, например в AnsiString так... AnsiString AnsiString::operator+(const AnsiString) т.е. вопрос - почему возвращенная стековая переменная не удаляется в первом случае и удаляется во втором - от чего это вообще зависит? Заранее спасибо! |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 11 Всего: 146 |
Я не гуру, но
где в первом варианте работа со стеком? на кой здесь надо & ? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 11 Всего: 60 |
в данном случае ты пытаешься получить адрес временной переменной. результатом выражения s1+s2 является временная переменная, которая удаляется после вычисления выражения целиком. |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Да в общем оба варианта не рабочие. А то, что один из них работает - это на совести Borland. Хотя не совсем. Компилятор же при использовании "рабочего" варианта честно предупреждает, что ссылка инициализируется временным объектом. Ну а если программисту на это наплевать, то это его проблемы.
А если вопрос не теоретический, а практический, то оба варианта излишни. В AnsiString используется механизм подсчета ссылок и поэтому при копировани и передаче AnsiString по значению копирования буфера не происходит. Следовательно, если Вы хотели избежать последнего, то Ваши усилия излишни. -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |