![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#21 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
Но(!) Вызывающая сторона сама явно создаёт объект (при помощи создавалки), и сама же его явно убивает (при помощи убивалки). Все довольно четко и логично. Никакой путаницы нет. При этом, выполняется правило: "одна функция - одна задача". Создавалка не занимается ничем, кроме создания объекта. Она не делает никаких предположений о том, что потом с этим объектом будет делать вызывающая сторона. Ты же запихиваешь в создавалку ещё и инициализацию объекта данными, то бишь операцию присваивания ему значений. И при этом прибиваешь эту операцию гвоздями к динамической памяти. И вот здесь слабое звено твоей конструкции: Что бы получить строку твоим инструментом, потребуется априори пользоваться кучей. Потому что твоя создавалка делает сразу два ничем не связанных дела - дёргает кучу, и выполняет присвоение. Два дела в одной функции. Но на языке си нет ни одной причины так себя ограничивать. А если я не хочу создавать объект в дин. памяти, а потом пасти его корректное удаление? У меня маленькие строки, буфера на стеке хватит за глаза. Я просто хочу передать указатель на этот стековый буфер в функцию, которая загрузит в него данные. Когда строка станет мне не нужной - мне даже удалять её явно не придётся. Такой вот он стек. На языке си нет разницы между указателями на стековые данные, и на динамические. Так почему это я должен вот так себя обламывать, и обязательно пользоваться только кучей? И постоянно пасти утечки памяти? Вот ты говоришь: обязан пользовать дин. память. А я говорю: ты не прав. Это лишнее и совершенно не нужное ограничение. Просто нужно функции проектировать так, что бы каждая решала только свою задачу, и не мешать все в кучу. |
|
![]() |
![]() |
![]() |
#22 | |
Форумчанин
Регистрация: 22.05.2012
Сообщений: 352
|
![]() Цитата:
![]() Для нормальной работы со строками можно АДТ в Ц создать, генерик. |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Возврат массива из функции | max_prorok | Помощь студентам | 2 | 06.10.2011 12:39 |
Возврат 2 и более аргументов из функции. | Drilla | Microsoft Office Excel | 2 | 18.09.2011 14:11 |
c++ возврат указателя из функции | Neolit1819 | Помощь студентам | 6 | 28.03.2011 15:37 |
Мини бэйсик:объявление функции, вызов функции , возврат. | AL_LORD | Помощь студентам | 2 | 14.10.2010 17:48 |
Возврат результата функции по ссылке | gladov | Общие вопросы C/C++ | 2 | 24.06.2008 22:48 |