![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
![]() ![]()
как я понял имеется ввиду этот ответ: http://forum.vingrad.ru/index.php?showtopi...st&p=109698
Это сообщение отредактировал(а) mes - 6.6.2008, 13:33 |
||||
|
|||||
Fazil6 |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
Зная этого чела лично, могу сказать с определенностью, что сейчас он так делать не стал бы. ![]() Я тоже так делать не сталбы.
|
||||
|
|||||
nirburg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.3.2008 Репутация: 1 Всего: 1 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ничем не обзавелся .. просто значения указателя не возврашается из функции - т.е указатель переданный в функцию, после ее завершения, продолжает показывать на ту же самую область что и раньше (которая к тому же была удалена внутри функции) чтоб избежать этого надо либо передавать указатель на указатель, либо указатель по ссылке в коментариях в предыдушем посту это и указано )) Это сообщение отредактировал(а) mes - 6.6.2008, 13:48 |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Не, ну выделить память внутри функции и выдать её наружу вполне себе юзкейс. Так, допустим, malloc поступает ![]() |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
нет проблемы в том, чтоб выделить память внутри функции проблема в том чтоб знать когда она выделилась и удалить ее когда нужно. и самое главное, чтоб этот процесс не отвлекал от основной цели - программирование, ибо если постояно помнить реализацию каждой функции, то и с ума сойти можно ![]() |
|||
|
||||
nirburg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.3.2008 Репутация: 1 Всего: 1 |
mes, прошу прощения, неправильно понял
![]() Daevaorn, ну malloc'y на роду написано память внутри себя выделять. а если так будет поступать каждая гордая функция, то что с программой будет твориться, я не представляю |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
malloc и new тем и хороши что всегда не задумываясь (о том как реализована функция) понятно, что делает функция и одназначно напрашивается вывод о применение ее антонима.
однако, что нужно делать после функции GetString (..) (удалять память или нет) имхо отнюдь не очевидно ![]() поэтому (на мой взгляд) и принято "неписанное " соглашении о использовании внутри функции зараннее выделенного буффера.. Это сообщение отредактировал(а) mes - 6.6.2008, 14:12 |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
а если строка больше чем буфер? Тогда ещё одну функцию заводить, которая вернет размер, потом выделить память, и только потом передать в функцию - много букв ![]() Хотя, конечно, это оптимально с точки зрения прозрачности кода. |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
![]() ![]()
|
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот пример без добавления второй функции
|
||||
|
|||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 2 Всего: 95 |
В общем, как я понял, сделать средствами new\delete (без привлечения библиотек-контейнеров и выкрутасов с несколькими функциями\вызовами) аналогичный дельфёвому фокус не удастся. Что ж, будет еще один плюс в пользу malloc\realloc
![]() ![]() Хотя, если появятся новые идеи - буду рад увидеть, да и для потомков, думаю, будет полезно... ![]() -------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |