Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
||||||
1 | ||||||
Надзиратель томагавков или что за велосипед я изобрел?03.03.2014, 11:29. Показов 983. Ответов 2
Метки нет (Все метки)
She's alive! Господа, в общем вдохновился я темой programina про статические поля класса и решил создать что-то похожее на сборщик мусора. По скольку я придерживаюсь мнения, что порою лучше сперва самому поковыряться, а потом уже почитать как правильно надо было сделать, то вот такой у меня получился уродец. Долго думал куда можно его применить в качестве примера. Придумал - класс-томагавк. Смысл в чем: какая-нибудь гипотетическая игрушка, где индеец бросает томагавки. Функция main тут имитирует само интерактивное бросание неизвестного количества томагавков. При каждом броске создается отдельный экземпляр класса томагавк, содержащий какие-либо свойства и методы (как он будет там вращаться, с какой скоростью лететь в разных средах, материал, цвет и прочее). Для примера реализован только один - первоначальное направление броска. То есть запустили его и забыли. Как они там куда повтыкались и куда улетели нас не волнует. Главное - подчистить память за ними при выходе из функции (к примеру, при переходе на новую локацию). В голову пришло использовать автоматический вызов деструктора по выходу из области видимости: создается один экземпляр класса на стеке - надзиратель - и как-то помечается. Остальные рабочие классы-томагавки создаются в куче (собственно по этому и надо за ними следить). Надзирателю доступны методы работы со всеми экземплярами, а рабочим только с самими собой. (Надзирателей может быть несколько) Вооот. Реализация класса следующая (все вроде постарался расписать в комментариях):
Итак. Возникли следующие вопросы: 1) Что это за хрень? Х) Что-то среднее между сборщиком мусора и умным указателем? 2) Как вообще сама идея использовать подобным образом автоматический вызов деструктора для объекта, созданного на стеке, чтобы управлять созданными динамически? 3) Куда это можно применить? 4) Можно ли как-то узнать где именно создан конкретный объект - на стеке или в куче?
1
|
03.03.2014, 11:29 | |
Ответы с готовыми решениями:
2
Мой Paint или изобретаем велосипед Файловая система. Велосипед или существующая StmGL :) Или хотим изобрести велосипед Велосипед из костылей или две формы на одну таблицу |
programina
|
03.03.2014, 14:32
#2
|
Не по теме:
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
||||||
03.03.2014, 21:34 | 3 | |||||
Да, похоже и на то и на другое. А еще - это синглтон и наполовину пул объектов.
Этой идее "сто лет" и реализуется она с помощью RAII. Это либо пул объектов, либо контейнер умных указателей. В таком виде - никуда. Главное достоинство в виде статического вектора регистрируемых элементов, одновременно является главным недостатком (т.к. сложно контролировать консистентность такого вектора (особенно в условиях многопоточности)). Чтобы его попробовать реально применять нужно объектам сделать счетчик ссылок, иначе удаление извне сделает ранее полученные ссылки невалидными. И запретить использование голых указателей, по той же причине. Так же присутствует определенное ограничение на многопоточное применение (возможно помог бы thread-local, но это уже зависит от задачи). Вообще такое совмещение функциональности видится мне антипаттерном, т.к. одна и та же сущность имеет кардинально разные условия применимости. Переносимого способа нет, как нет и гарантированно рабочего в большинстве ситуаций непереносимого. Можно попробовать сделать одну из двух вещей: 1) Запретить создание объектов на стеке (конструкторы в приват, делаем статическую функцию Create, которая создает объект требуемым способом). 2) Запретить создание объектов в куче, поместив оператор new в приват. Однако этот запрет обходится при желании. В любом случае это потребует разнесения в разные классы (объекты одного живут только на стеке, другого - только в куче). Ну и вот в коде углядел вот это:
1
|
03.03.2014, 21:34 | |
03.03.2014, 21:34 | |
Помогаю со студенческими работами здесь
3
Создать классы: колесо, велосипед и автомобиль (иерархия или композиция) Горожу велосипед с SIM968. Правда пока что-то не едет. Шахматы Next - изобрел россянин Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |