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