![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Andrew Selivanov |
![]()
Сообщение
#11
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
А вот auto_ptr с массивом использовать не надо - убъёть! ![]() Litkevich Yuriy Проще всего переделать код на использование vector<int>. С ним твоя исходная функция будет выглядеть так:
А использовать её будешь так:
Написано об этом очень хорошо у Страуструпа в самом начале "Язык программирования С++ 3ед." - книжка, которую каждый уважающий себя программист на С++ должен прочитать и понять. ![]() Мммм... вариант, но мне кажется, что так будет несколько неудобно обрабатывать ошибку (т.е. нулевое значение при возврате), кроме того ( поправьте если ошибаюсь), из временного внутреннего вектора будет лишнее копирование. Мне кажется, корректней будет так:
Ну и typedef не забыть если это конкретный тип, или сделать сразу шаблончик из функции ![]() И еще вариант: можно вернуть итератор... |
|
|
Tonal |
![]()
Сообщение
#12
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
Если это действительно ошибка - кидай исключение.
Если - одно из возможных значений - можно обойтись возвратом пустого вектора. Насчёт копирования - вменяемые компиляторы С++ применяют оптимизацию возвращаемого значения, так что в итоге, скомпилированный код будет очень похож на код с передачей ссылки. ![]() Хотя если не очень доверяешь компилятору - можно и руками пооптимизировать, но мне кажеться, что делать это надо только когда понятно что именно. ![]() Да, по тому, что написал автор, видно что размерчик ему известен, стал быть его сразу нужно вектору и выставить. Сообщение отредактировал Tonal - 5.2.2008, 8:37 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#13
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
видно что размерчик ему известен Да известен, это буфер для работы с UART'ом, собственно, некоторые функции кладут в этот буфер в определенное место свои данные, потом буфер уезжает к внешнему девайсу, максимальный размер буфера в котором ЦЕЛЫХ 28 байт (для девайса это много). |
|
|
AD |
![]()
Сообщение
#14
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
А вот auto_ptr с массивом использовать не надо - убъёть! ![]() Litkevich Yuriy Проще всего переделать код на использование vector<int>. С ним твоя исходная функция будет выглядеть так:
А использовать её будешь так:
Написано об этом очень хорошо у Страуструпа в самом начале "Язык программирования С++ 3ед." - книжка, которую каждый уважающий себя программист на С++ должен прочитать и понять. ![]() Полностью согласен с данным автором. На мой взгляд, если и делать подобное, то, как указано выше. А вообще не советовал бы возвращать указатель на локальный массив. Лучше бы завести его глобально или через namespace. |
|
|
![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 18.2.2025, 2:18 |