![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Всем привет!
Очень часто использую умные указатели shared и weak. А недавно ко мне пришла идея сделать простой аналог таких умных указателей, который будет только хранить указатель на нужный объект и позволять проверять указатель на "битость" Для этого нужно всего-лишь хранить указатель на объект в другом классе в куче. Как вам такая идея? |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Типо того, но без семантики владения.
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а не поделитесь ли технологией проверки указателя на "битость" ? Это сообщение отредактировал(а) mes - 11.5.2010, 10:08 |
|||
|
||||
| Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
azesmcar, ну что бы постоянно не думать о том где использовать weak (циклические указатели) вместо shared. Получится что-то среднее между auto и shared/weak.
Хранить указатель в другом классе в куче. |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Что подразумевается под "битостью" указателя?
-------------------- вопросов больше чем ответов |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
То, что указатель не указывает на валидный объект. |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Не пойму, где тут связь? Какая разница где хранить указатель? Как место хранения может дать понять что объект, на который настроен указатель не валиден?
-------------------- вопросов больше чем ответов |
|||
|
||||
| Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Леопольд, посмотри как устроены умные указатели.
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
На "битость" даже shared_ptr не проверяет. Он предполагает, что программист не идиот: дал ему корректный указатель и не рулит указателем самостоятельно. Другими словами, даже если ты скормишь корректный указатель shared_ptr, но затем тут же освободишь память из-под объекта, на который он указывал, то при попытке уничтожить shared_ptr ты получишь в лучшем случае сегфолт (или access violation). Поэтому забудь про проверку.
Если ты уберешь семантику владения, то ты получишь утечки памяти. Или лишнюю усложненность кода. Возможно, тебе стоит почитать о шаблонах проектирования. Очень может быть, что ты найдешь совершенно неожиданные способы решения своей проблемы. |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
По разному...
Это сообщение отредактировал(а) Леопольд - 12.5.2010, 14:05 -------------------- вопросов больше чем ответов |
|||
|
||||
| Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
bsa, да, конечно же умные указатели гораздо продуманнее чем мой указатель. Без семантики владения и подсчёта ссылок утечка памяти конечно же будет, однако если самому контролировать её (освобождать где нужно, использовать finally) то тоже всё будет хорошо.
Думаю напишу такой класс указателей, чисто так. Для себя, потренироваться. |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Elfet, finally в С++?
-------------------- вопросов больше чем ответов |
|||
|
||||
| Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Леопольд, ну, да
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |