Название: Возврат ссылки Отправлено: blood_shadow от Март 11, 2011, 18:41 Добрый вечер,
есть ф-ция с такой сигнатурой: Код то есть ф-ция возвращает ссылку на константный указатель на объект класса AccountAutorizationData, вопрос состоит в следующем что лучше вернуть если выполнение пойдет по ветке else? есть идея вернуть Код , но компилер жалуется на то что я возвращаю указатель на временную переменную, нормально ли это? Название: Re: Возврат ссылки Отправлено: m_ax от Март 11, 2011, 18:48 А смысыл в try, catch внутри функции??
Уж тогда так: Код
Название: Re: Возврат ссылки Отправлено: Fat-Zer от Март 11, 2011, 18:51 1) на кой понадобилось возвращать ссылку на указатель
2) не вижу здесь смысла в обработке исключений... 3) так нельзя. надо или возвращать 0, как ошибку, или завести "пустой" статический объект и возвращать указатель на него Название: Re: Возврат ссылки Отправлено: m_ax от Март 11, 2011, 18:53 И вообще есть уже стандартный тип исключения при таких ситуациях:
std::out_of_range в #include <stdexcept> Название: Re: Возврат ссылки Отправлено: blood_shadow от Март 11, 2011, 19:15 1) на кой понадобилось возвращать ссылку на указатель у меня массив указателей на созданные объекты, потому и надо возвращать ссылку для ф-ции типа "получить данные" и для ф-циитипа "изменить данные внутри модели" 3) так нельзя. надо или возвращать 0, как ошибку, или завести "пустой" статический объект и возвращать указатель на него никогда не создавал статических объектов.. завел в самом определения класса пустой объект Код я так понимаю что если модель только одна и создается в куче, то фактически статический объект эквивалентен обычному? Название: Re: Возврат ссылки Отправлено: Fat-Zer от Март 11, 2011, 20:03 1) всё равно не понял... ну да ладно...
3) если ч правильно понял, то возвращать ссылку на expAUTH можно, однако ИМХО более правильное рещение m_ax'а Название: Re: Возврат ссылки Отправлено: Igors от Март 12, 2011, 20:07 Добрый вечер, На мой вгляд, эта конструкция "заумно нездорова". По существу (если не обращать внимания на C++ навороты) Вы написали AccountAutorizationData **, а это всегда "напрягает мозги". Плюс Вы берете указатель на элемент вектора - а это работает до (какого-то числа) push_back, erase и.т.п. Незатейливый код здесь ИМО легче и лучшеесть ф-ция с такой сигнатурой: Код
Код А со ссылкой здесь хорошие шансы "влипнуть" т.к. она не имеет той "свободы присваивания" что указатель Название: Re: Возврат ссылки Отправлено: blood_shadow от Март 12, 2011, 21:08 А со ссылкой здесь хорошие шансы "влипнуть" т.к. она не имеет той "свободы присваивания" что указатель спасибо, все поправил, действительно ссылки на указатели были избыточны..кстати, а как лучше, создание объекта лучше локализовать в отдельной ф-ции, и не разбрасывать по всему коду? Название: Re: Возврат ссылки Отправлено: Igors от Март 12, 2011, 21:32 кстати, а как лучше, создание объекта лучше локализовать в отдельной ф-ции, и не разбрасывать по всему коду? Если это безобидно, напрКод То почему бы и не разбросать? :) Др. дело если надо чтобы только какой-то конкретный класс может/должен создавать (а не всякий). Если ясно "чей" (какого класса) это должен быть метод - создавайте метод, иначе нет. |