|
|
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
Функция Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вызов Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 16:16 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
man_555strncpy, memcpy - это всё же С. С++ преследует иную идеологию в теперешнем виде. Какую? С использованием AnsiString? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 16:20 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАША man_555strncpy, memcpy - это всё же С. С++ преследует иную идеологию в теперешнем виде. Какую? С использованием AnsiString? рекомендую покурить Страструпа, а AnsiString - это вообще-то реплизация класса "Строка" на Delphi. stl::string - вот это про с++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 16:23 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
man_555 СИСАША man_555strncpy, memcpy - это всё же С. С++ преследует иную идеологию в теперешнем виде. Какую? С использованием AnsiString? рекомендую покурить Страструпа, а AnsiString - это вообще-то реплизация класса "Строка" на Delphi. stl::string - вот это про с++ А есть Страструп в электронном виде? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 16:24 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАШАФункция Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вызов Код: plaintext 1. 2. 3. Непонятно, что именно ты тут хотел добиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 16:50 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
Akh СИСАШАФункция Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вызов Код: plaintext 1. 2. 3. Непонятно, что именно ты тут хотел добиться. Я просто не понял как "убить память". Смешно конечно реализовал, но попробую объяснить, что хотел. Вызываем функцию Copy, она выделяет память под result, выполняется и передается в Address адрес блока памяти, выделенного под result, ну а потом delete (&z) высвобождаем память, выделенную под result. Но по вашему вопросу я понял, что сделал не правильно. Мне как то на примере легче научиться :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 17:24 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАША Akh СИСАШАФункция Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вызов Код: plaintext 1. 2. 3. Непонятно, что именно ты тут хотел добиться. Я просто не понял как "убить память". Смешно конечно реализовал, но попробую объяснить, что хотел. Вызываем функцию Copy, она выделяет память под result, выполняется и передается в Address адрес блока памяти, выделенного под result, ну а потом delete (&z) высвобождаем память, выделенную под result. Но по вашему вопросу я понял, что сделал не правильно. Мне как то на примере легче научиться :)) Теперь понятно. Если делать как ты, то тогда: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вызов Код: plaintext 1. 2. 3. Но можно и так: Код: plaintext 1. 2. 3. 4. 5. 6. Вызов Код: plaintext 1. 2. 3. Стиль же так же и осталься плохим. Зато теперь память будет очищаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 17:36 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
AkhСтиль же так же и осталься плохим. Зато теперь память будет очищаться. Спасибо!:) Но вот про стиль всё равно ничего не понял! В чём заключаются ошибки моего "стиля"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 17:41 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
И ещё. Написал такой кусочек - Обработка события нажатия кнопки Код: plaintext 1. 2. 3. 4. 5. 6. 7. При первом нажатии кнопки её Caption принимает 10 . Если память при Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 17:47 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАША AkhСтиль же так же и осталься плохим. Зато теперь память будет очищаться. Спасибо!:) Но вот про стиль всё равно ничего не понял! В чём заключаются ошибки моего "стиля"? Нет целостности работы с памятью. Функция должна выполнять только свою работу, и проявлять как можно меньше побочных эффектов, т.к. любой побочный эффект от этой функции не ожидается, и поэтому он влекет за собой не желательные последствия. У тебя задача функции - скопировать часть строки. Скопировать, это значит, откуда-то взять и куда-то положить. У тебя же есть побочный эффект - твоя функция выделяет память. Минимальный ущерб, который твоя функция наносит это: 1) Ты не можешь использовать уже готовый буфер в целях экономии времени. 2) Ты не можешь использовать уже готовый буфер в целях экономии кода (если опять же тебе кто-то буфер передал, и тебе надо его заполнить, и для этого ты вызываешь функцию). 3) Тебе постоянно надо помнить о том, что твоя функия выделяет память и неободимо ее освобождать. А если у тебя будет 10 тысяч подобных функций, с произвольными "побочными эффектами"? Максимальный же - ты в конце концов "съешь" всю оперативную память и весь своп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 17:57 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАШАИ ещё. Написал такой кусочек - Обработка события нажатия кнопки Код: plaintext 1. 2. 3. 4. 5. 6. 7. При первом нажатии кнопки её Caption принимает 10 . Если память при Код: plaintext Это хорошо, что у тебя еще не акссес виолейшен. Где завершающий нуль у Result, перед вызовом strcat? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 18:00 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
Akh СИСАША AkhСтиль же так же и осталься плохим. Зато теперь память будет очищаться. Спасибо!:) Но вот про стиль всё равно ничего не понял! В чём заключаются ошибки моего "стиля"? Нет целостности работы с памятью. Функция должна выполнять только свою работу, и проявлять как можно меньше побочных эффектов, т.к. любой побочный эффект от этой функции не ожидается, и поэтому он влекет за собой не желательные последствия. У тебя задача функции - скопировать часть строки. Скопировать, это значит, откуда-то взять и куда-то положить. У тебя же есть побочный эффект - твоя функция выделяет память. Минимальный ущерб, который твоя функция наносит это: 1) Ты не можешь использовать уже готовый буфер в целях экономии времени. 2) Ты не можешь использовать уже готовый буфер в целях экономии кода (если опять же тебе кто-то буфер передал, и тебе надо его заполнить, и для этого ты вызываешь функцию). 3) Тебе постоянно надо помнить о том, что твоя функия выделяет память и неободимо ее освобождать. А если у тебя будет 10 тысяч подобных функций, с произвольными "побочными эффектами"? Максимальный же - ты в конце концов "съешь" всю оперативную память и весь своп. А есть другие варианты реализации Copy у кого-нибудь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 18:26 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
Akh СИСАША AkhСтиль же так же и осталься плохим. Зато теперь память будет очищаться. Спасибо!:) Но вот про стиль всё равно ничего не понял! В чём заключаются ошибки моего "стиля"? Нет целостности работы с памятью. Функция должна выполнять только свою работу, и проявлять как можно меньше побочных эффектов, т.к. любой побочный эффект от этой функции не ожидается, и поэтому он влекет за собой не желательные последствия. У тебя задача функции - скопировать часть строки. Скопировать, это значит, откуда-то взять и куда-то положить. У тебя же есть побочный эффект - твоя функция выделяет память. Минимальный ущерб, который твоя функция наносит это: 1) Ты не можешь использовать уже готовый буфер в целях экономии времени. 2) Ты не можешь использовать уже готовый буфер в целях экономии кода (если опять же тебе кто-то буфер передал, и тебе надо его заполнить, и для этого ты вызываешь функцию). 3) Тебе постоянно надо помнить о том, что твоя функия выделяет память и неободимо ее освобождать. А если у тебя будет 10 тысяч подобных функций, с произвольными "побочными эффектами"? Максимальный же - ты в конце концов "съешь" всю оперативную память и весь своп. Польностью согласен. От себя бы добавил, что если нет специальных ограничений для приложения, то лучше всё-таки пользоваться современным языком. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 18:29 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
man_555лучше memcpy использовать то что для копирования строк можно использовать memcpy - это однозначно, и возможно, что программист не забудет поставить где надо завершающие нули, правильно вычислит размер нужного буфера. но все равно в коде будет логическая ошибка - mem*** предназначены для сырой памяти, а str*** - для с-строк. это и есть один из признаков плохого стиля - использовать для какого то типа данных, при наличии аналогичных функций, функции, предназначенные для другого, даже если они и работают как надо. оправдание такого подхода - это только жесткая оптимизация, но в этой задаче ей и не пахнет. man_555рекомендую покурить Страструпа, а AnsiString - это вообще-то реплизация класса "Строка" на Delphi. stl::string - вот это про с++ а это вот почему? по какому критерию определяется сиплюсплюсистость:) класса? лежит ли он в STL или нет? string - это так называемый simple type, и все равно что он выведен из шаблона, конечный пользователь об этом не знает. кстати stl::string - нет такого :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 18:32 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
man_555 Akh СИСАША AkhСтиль же так же и осталься плохим. Зато теперь память будет очищаться. Спасибо!:) Но вот про стиль всё равно ничего не понял! В чём заключаются ошибки моего "стиля"? Нет целостности работы с памятью. Функция должна выполнять только свою работу, и проявлять как можно меньше побочных эффектов, т.к. любой побочный эффект от этой функции не ожидается, и поэтому он влекет за собой не желательные последствия. У тебя задача функции - скопировать часть строки. Скопировать, это значит, откуда-то взять и куда-то положить. У тебя же есть побочный эффект - твоя функция выделяет память. Минимальный ущерб, который твоя функция наносит это: 1) Ты не можешь использовать уже готовый буфер в целях экономии времени. 2) Ты не можешь использовать уже готовый буфер в целях экономии кода (если опять же тебе кто-то буфер передал, и тебе надо его заполнить, и для этого ты вызываешь функцию). 3) Тебе постоянно надо помнить о том, что твоя функия выделяет память и неободимо ее освобождать. А если у тебя будет 10 тысяч подобных функций, с произвольными "побочными эффектами"? Максимальный же - ты в конце концов "съешь" всю оперативную память и весь своп. Польностью согласен. От себя бы добавил, что если нет специальных ограничений для приложения, то лучше всё-таки пользоваться современным языком. Код: plaintext 1. 2. 3. 4. Мне в конечном итоге надо получить DLL, у которой в параметрах функций будет только char* и int. Дайте ссылки на статьи или учебники(проверенные :)), где можно посмотреть и изучить "современный" язык. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 18:33 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
эх, отожгу man_555лучше memcpy использовать то что для копирования строк можно использовать memcpy - это однозначно, и возможно, что программист не забудет поставить где надо завершающие нули, правильно вычислит размер нужного буфера. но все равно в коде будет логическая ошибка - mem*** предназначены для сырой памяти, а str*** - для с-строк. это и есть один из признаков плохого стиля - использовать для какого то типа данных, при наличии аналогичных функций, функции, предназначенные для другого, даже если они и работают как надо. оправдание такого подхода - это только жесткая оптимизация, но в этой задаче ей и не пахнет. man_555рекомендую покурить Страструпа, а AnsiString - это вообще-то реплизация класса "Строка" на Delphi. stl::string - вот это про с++ а это вот почему? по какому критерию определяется сиплюсплюсистость:) класса? лежит ли он в STL или нет? string - это так называемый simple type, и все равно что он выведен из шаблона, конечный пользователь об этом не знает. кстати stl::string - нет такого :) молодец, возьми с полки пряник! Чего не прдставился то? Хорошо, если по всем канонам, то std::basic_string, но заверю, что stl::string работает так же замечательно ;-). "Приплюснотость" определяется современными тенденциями. Конечно, С++ существует помимо привычек и вкусов своего создателя, но этот класс был создан именно для работы со строками. Второе. Вы всё-таки определитесь C это или С++. Если второе, то memcpy как раз то, что доктор прописал, ибо хорошим стилем, при отходе от основных концепций, является то, что наиболее эффективно т.е. memcpy (рекомендация его же Страуструпа. Третье издание.), хотя можно спорить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 21:39 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
man_555Хорошо, если по всем канонам, то std::basic_string я просто хотел сказать что string это просто класс, не лучше или хуже чем другие. man_555но заверю, что stl::string работает так же замечательно ;-). ну не знаю, где это у вас работает, в vs2003 не хочет у меня суфлером ничего показывать, дальше смотреть было лень... покажите чтоли пример. man_555"Приплюснотость" определяется современными тенденциями. огласите их чтоли, а то непонятно, цикл for современен или надо уже везде for_each man_555Конечно, С++ существует помимо привычек и вкусов своего создателя, но этот класс был создан именно для работы со строками. мне кажется что AnsiString тоже был создан для работы со строками. мало того, в мфц приложении я буду использовать CString вместо string потому что он более родной для этой среды, несмотря ни на какие модные веяния. man_555Второе. Вы всё-таки определитесь C это или С++. Если второе, то memcpy как раз то, что доктор прописал, ибо хорошим стилем, при отходе от основных концепций, является то, что наиболее эффективно т.е. memcpy (рекомендация его же Страуструпа. Третье издание.), хотя можно спорить... я чего то не пойму здесь. от каких концепций произведен отход? и эффективно с точки зрения чего? скорости работы, количества занимаемой памяти, повторного использования, легкости восприятия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 00:20 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
СИСАШАМне в конечном итоге надо получить DLL, у которой в параметрах функций будет только char* и int. Дайте ссылки на статьи или учебники(проверенные :)), где можно посмотреть и изучить "современный" язык. Во первых разберись, что такое указатели, и как их едят. Для этого тебе надо почитать учебник по с++. Например можешь поискать в сети автор Б. Керниган, Д. Ритчи Язык программирования Си Издание 3-е, исправленное Перевод с английского под редакцией Вс. С. Штаркмана Невский Диалект, Санкт-Петербург 2001 В сети 100% где-то есть. Когда разберешься, обрати еще раз свое внимание на strncpy, которой ты пользуешься. Тогда сам увидишь что твоя функция может иметь интерфейс такого же плана, но в ней будет на один-два параметра больше (char* или char* и int). На счет типа с смысла возвращаемого значения тоже стоит подумать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 09:51 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
man_555Второе. Вы всё-таки определитесь C это или С++. Если второе, то memcpy как раз то, что доктор прописал, ибо хорошим стилем, при отходе от основных концепций, является то, что наиболее эффективно т.е. memcpy (рекомендация его же Страуструпа. Третье издание.), хотя можно спорить... strncpy и memcpy - C. strncpy же не будет копировать мусор за строкой, а будет dst заполнять нулями. Это кстати дает еще один плюс - надежность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 09:55 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
И опять у меня аналогичное Функция Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. И вызов Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. А стиля нет. "Подскажите" пример этого со стилем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 14:14 |
|
||
|
Просьба проверить
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. А так стиль есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 15:44 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34275919&tid=2029590]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
198ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 509ms |

| 0 / 0 |
