![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| T0ohtik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 9.2.2008 Репутация: нет Всего: 1 |
Пишу класс для больших чисел. А так как это числа, то надо их складывать. Реализовал перегрузку сложения. Запустил, работает. Но смущает warning: warning C4172: returning address of local variable or temporary. Ниже привожу код перегрузки:
Варниг выскакивает на сроке return. Ну это и понятно - мы же в методе создаем переменную, которая при выходе из метода уничтожится. Да и создавать в памяти еще одну переменную как-то не хочется, тем более она может занимать очень много памяти. Есть ли какие то методы исправления? |
|||
|
||||
| bronislav |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 334 Регистрация: 29.1.2008 Где: Украина::Донецк Репутация: нет Всего: 3 |
Ну оте же не перегрузка сложени, а просто член-метод класса.
Перегрузка должна быть такой
Заметь, что возвращение не по ссылке, потому, что если возвращать по ссылке будет возвращаться ссылка на локальную (относительно метода) переменную, которая после завершения метода уничтожиться и ссылка будет указывать в никуда. Это сообщение отредактировал(а) bronislav - 3.5.2008, 16:01 -------------------- ![]() иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes |
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 11 Всего: 36 |
Внимательно читаем
С. Мейерс "Эффективное использование C++" Правило 23: Не пытайтесь вернуть ссылку, когда вы должны вернуть объект. |
|||
|
||||
| T0ohtik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 9.2.2008 Репутация: нет Всего: 1 |
bronislav, тьфу ты... У меня с начало идет как у тебя, т.е. перегрузка сложения, а в ней вызывается функция Add. Кстати спасибо, что обратил внимание. Я задумался о нужности этой функции...
Rififi, правило перечитал, только не понял какая разница между стеком и кучей? И то и то вроде должны очищаться при выходе из метода или куча очищается позже? |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Читай учебники. Куча вообще автоматически не очищается, это забота программиста - вовремя и правильно вызвать free/delete/delete[]. |
|||
|
||||
| Annihilator |
|
|||
![]() bytegrinder ![]() ![]() Профиль Группа: Участник Сообщений: 493 Регистрация: 21.11.2006 Где: Омск Репутация: 1 Всего: 3 |
вот прикинь ты возвращаешь ссылку на локальную переменную. эта переменная разрушится при выходе из функции, ну и на что будет указывать твоя ссылка? Что толку с нее? -------------------- Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |