![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Litkevich Yuriy |
![]()
Сообщение
#1
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Переменные созданные внутри функций живут пока мы невышли из фукции, так вроде.
Видел такую вещь:
т.е. функция возвращает указатель на масив, который в ней же создан. Но покинув функцию масив прекратит существование и указатель будет показывать в кучу проги, например, может показывать в неосмысленное место. Я правильно понимаю, т.е. это косячек програмиста, или как-то это иначе работает применительно просто к C++? |
|
|
![]() |
Andrew Selivanov |
![]()
Сообщение
#2
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
А вот auto_ptr с массивом использовать не надо - убъёть! ![]() Litkevich Yuriy Проще всего переделать код на использование vector<int>. С ним твоя исходная функция будет выглядеть так:
А использовать её будешь так:
Написано об этом очень хорошо у Страуструпа в самом начале "Язык программирования С++ 3ед." - книжка, которую каждый уважающий себя программист на С++ должен прочитать и понять. ![]() Мммм... вариант, но мне кажется, что так будет несколько неудобно обрабатывать ошибку (т.е. нулевое значение при возврате), кроме того ( поправьте если ошибаюсь), из временного внутреннего вектора будет лишнее копирование. Мне кажется, корректней будет так:
Ну и typedef не забыть если это конкретный тип, или сделать сразу шаблончик из функции ![]() И еще вариант: можно вернуть итератор... |
|
|
![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 22.6.2025, 6:01 |