Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как быстро обнулить объект? 
:(
    Опции темы
Guest
Дата 14.9.2005, 10:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Всем привет!
Когда-то читал книгу, где описывался пример то-ли какой-то библиотечной функции С, то-ли API-функции, в которую можно подставить любой объект (класс, структуру, int-ы всякие, хоть что) и быстро обнулить поля этого объекта. А теперь, хоть убей, не могу вспомнить название этой замечательной функции. Подскажите!

  Вверх
Dark Elf
Дата 14.9.2005, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 576
Регистрация: 26.12.2003
Где: Брисбен

Репутация: 9
Всего: 10



Может быть
Код

void ZeroMemory(
  PVOID Destination,
  SIZE_T Length
);

?


--------------------
PM MAIL WWW ICQ Skype GTalk Jabber MSN   Вверх
_hunter
Дата 14.9.2005, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



ZeroMemory() или FillMemory()


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
bilbobagginz
Дата 14.9.2005, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 3
Всего: 317



memset()


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
chaos
Дата 14.9.2005, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



или как нить так smile
Код

for (BYTE *pFree = pObj, int i = 0; i < sizeof(*pObj); pFree[i] = 0, i++);


Это сообщение отредактировал(а) chaos - 14.9.2005, 11:42
PM WWW   Вверх
Dreamer_0x01
Дата 14.9.2005, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 12



угу. И шаблонами такую конструкцию обернуть и в функцию запихать ;)


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Crait
Дата 14.9.2005, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



На Билдере, по крайней мере, всё это приводит к глюкам,
если в классе имеются виртуальнае методы smile

Это сообщение отредактировал(а) Crait - 14.9.2005, 14:57
PM MAIL   Вверх
_hunter
Дата 14.9.2005, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



угу. ты б еще память ядра обнулил. и удивлялся бы -- а почему все завернулось...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Crait
Дата 14.9.2005, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



_hunter, кому адресована твоя реплика ?
PM MAIL   Вверх
_hunter
Дата 14.9.2005, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



тебе smile


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Crait
Дата 14.9.2005, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



Так с чего ты взял, что я удивляюсь ?
PM MAIL   Вверх
_hunter
Дата 14.9.2005, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



с последнего поста smile ( того, на который я ответил )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Crait
Дата 14.9.2005, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



Я не удивляюсь, но предостерегаю (в отличие от других ответивших)
от обнуления _всех_ данных класса.
PM MAIL   Вверх
Mayk
Дата 14.9.2005, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



В BSD есть еще ф-ция bzero. Некоторые компиляторы определяют её примерно как
Код

#define bzero(ptr, sz) (memset((ptr),0,(sz)))

Её не определяют не все виндозные компиляторы впрочем. Но вот в юнихах...

Цитата(SergeCpp @ 14.9.2005, 16:09)
STOSD

smile Тогда уж x ^= x;



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
JoyEx
Дата 14.9.2005, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 21.6.2005
Где: Москва, РФ

Репутация: нет
Всего: 12



Цитата(Crait @ 14.9.2005, 14:55)
На Билдере, по крайней мере, всё это приводит к глюкам,
если в классе имеются виртуальнае методы 


для 1 класса попробуй так:

ZeroMemory( (BYTE *)Destination + 4, sizeof(Класс) - 4);



--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
Mayk
Дата 14.9.2005, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(JoyEx @ 14.9.2005, 21:40)
ZeroMemory( (BYTE *)Destination + 4, sizeof(Класс) - 4);

Дыкть, наследование может быть множественным.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
_hunter
Дата 14.9.2005, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



и какой вообще смысл обнулять класс? лучше него это всеравно никто не сделает...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Crait
Дата 14.9.2005, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



Смысл как раз есть, и нередко smile
PM MAIL   Вверх
Дрон
Дата 14.9.2005, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 92



Цитата(Crait @ 14.9.2005, 19:01)
Смысл как раз есть, и нередко smile

Это противоречит ООП (щаз как Domestic Catа позову!! smile ).

Это сообщение отредактировал(а) Дрон - 14.9.2005, 18:03


--------------------
Да. Именно так.
PM   Вверх
Crait
Дата 14.9.2005, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



Цитата
Это противоречит ООП

Оно может и так, но бывает удобно smile
PM MAIL   Вверх
bilbobagginz
Дата 14.9.2005, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 3
Всего: 317



кроме полей класса в классе есть ещё уйма ( для меня ) лишней информации (vptr ет цетера), к-рую memset затрёт полностью, и что не будет способствовать здоровью программы..


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Mayk
Дата 14.9.2005, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(Crait @ 14.9.2005, 22:05)
Оно может и так, но бывает удобно

Неужели
Код

classs->~Class()
bzero(classs, sizeof(*classs))

удобнее
Код

classs->reset();

smile


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Crait
Дата 14.9.2005, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



Это понятно, но тогда в reset() придётся обнулять все поля вручную,
а при добавлении нового поля помнить, что следует модифицировать
и reset().
В принципе, так и делаю smile

Это сообщение отредактировал(а) Crait - 14.9.2005, 18:24
PM MAIL   Вверх
_hunter
Дата 14.9.2005, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



а в чем проблема помнить все поля? при чем их обычно пишут перед функциями -- так-что просто взглядом пробежаться на предмет есть/нету...

+ предположим я в конструкторе сделал VirtualAlloc(дофига памяти)
и что будет после memset' a?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Crait
Дата 14.9.2005, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



Большой-то проблемы конечно же нет, но всё-же, одно дело
- единожды написать что-нибудь типа memset(this,0,sizeof(*this))
и знать, что покрыто нулём будет абсолютно всё smile,
а другое - перечислять десяток операций по обнулению полей
но, главное, помнить, что при изменениях в классе
следует модифицировать также и метод reset().

Разумеется, никто, я думаю, не ожидает, что таким образом
будет обнулена и динамически выделяемая память.

Это сообщение отредактировал(а) Crait - 14.9.2005, 19:40
PM MAIL   Вверх
_hunter
Дата 15.9.2005, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



будут обнулены векторы, стринги... интересно...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Crait
Дата 15.9.2005, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



Заставь кой-кого smile Богу молиться, так он себе лоб расшибёт...
Речь ведь в основном о POD-типах.

Это сообщение отредактировал(а) Crait - 15.9.2005, 12:03
PM MAIL   Вверх
_hunter
Дата 15.9.2005, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



Цитата
Речь ведь в основном о POD-типах.

дааа? не заметил smile
речь шла о полях ( без указания типа... )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Crait
Дата 15.9.2005, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



Нередко встречаются и такие типы полей, для которых
термин "обнуление" вообще теряет смысл.
А мы, я надеюсь, обсуждали не эти случаи.

Это сообщение отредактировал(а) Crait - 15.9.2005, 12:38
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1440 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.