Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2011, 20:30   #1
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию Хороший стиль программирования на чистом С - работа с объектами

Ситуация такая. Раньше в моей проге на С были объекты, с которыми я работал так:
Код:
typedef struct {
    // ...
} FzOlolo;

FzOlolo *FzOlolo_Create();
void FzOlolo_Destroy(FzOlolo*);
void FzOlolo_Pysh(FzOlolo*);
И всё было супер.

Теперь у меня в проге появились объекты ссылочного типа, т.е. сборка мусора с подсчётом ссылок. Соответственно, у объектов появились функции FzObject_IncRef и FzObject_DefRef. Так вот, после вызова удаления ссылки может вызваться деструктор FzObject_Destroy, если была всего одна ссылка. А в коде, вызвавшем FzObject_DecRef, указатель на объект будет указывать на освобождённую память.

Собственно, вопрос в том, как реализовать это всё максимально безопасно? Была идея передавать в методы объекта указатель на указатель на объект, чтобы ему при уничножении объекта можно было присвоить 0, и тогда в коде, вызвавшем FzObjecr_DecRef указатель станет равен нулю. Но что-то мне эта идея не нравится, слишко много операций взятия адреса/разыменовывания.

Есть идеи?
anyx вне форума Ответить с цитированием
Старый 07.06.2011, 23:48   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Есть либа сишная, к-рая делает из Си практически объектный язык, вот только не помню как она называется. Она очень известная. Возможно GLib, но не уверен что правильно помню.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 08.06.2011, 00:20   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2anyx
Код:
void FzOlolo_Pysh(FzOlolo*);
python shell?

2mutabor
да, в glib есть gc, но он видимо свой хочет написать
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# интерфейсы и "хороший стиль" D][mon Помощь студентам 1 24.04.2011 22:00
Выбор языка программирования для работы с объектами сторонних приложений... Smerch66 Общие вопросы по программированию, компьютерный форум 3 30.03.2011 01:54
Стиль программирования Fataller Обсуждение статей 7 21.09.2010 22:30
Хороший стиль программирования DimOn4Ik Свободное общение 17 10.05.2010 01:12
Стиль программирования на С/С++ AddisAbeba Общие вопросы C/C++ 36 27.12.2008 00:48