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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аналог умных указателей 
V
    Опции темы
Elfet
Дата 10.5.2010, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



Всем привет! 

Очень часто использую умные указатели shared и weak. А недавно ко мне пришла идея сделать простой аналог таких умных указателей, который будет только хранить указатель на нужный объект и позволять проверять указатель на "битость" smile

Для этого нужно всего-лишь хранить указатель на объект в другом классе в куче. Как вам такая идея?  smile 


--------------------
PM MAIL WWW Skype   Вверх
azesmcar
Дата 10.5.2010, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

Репутация: 81
Всего: 211



PM   Вверх
Elfet
Дата 10.5.2010, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



Типо того, но без семантики владения. smile


--------------------
PM MAIL WWW Skype   Вверх
azesmcar
Дата 11.5.2010, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

Репутация: 81
Всего: 211



Цитата(Elfet @  10.5.2010,  20:39 Найти цитируемый пост)
Типо того, но без семантики владения. smile 

а зачем? чем это не устраивает?
PM   Вверх
mes
Дата 11.5.2010, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 144
Всего: 250



Цитата(Elfet @  10.5.2010,  19:39 Найти цитируемый пост)
но без семантики владения.  

Цитата(Elfet @  10.5.2010,  19:13 Найти цитируемый пост)
и позволять проверять указатель на "битость" 

а не поделитесь ли технологией проверки указателя на "битость" ?  smile  

Это сообщение отредактировал(а) mes - 11.5.2010, 10:08


--------------------
PM MAIL WWW   Вверх
Elfet
Дата 11.5.2010, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



azesmcar, ну что бы постоянно не думать о том где использовать weak (циклические указатели) вместо shared. Получится что-то среднее между auto и shared/weak.

Цитата(mes @  11.5.2010,  11:08 Найти цитируемый пост)
а не поделитесь ли технологией проверки указателя на "битость" ?  

Хранить указатель в другом классе в куче. smile



--------------------
PM MAIL WWW Skype   Вверх
Леопольд
Дата 12.5.2010, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Elfet @  11.5.2010,  13:00 Найти цитируемый пост)
Хранить указатель в другом классе в куче.
Что подразумевается под "битостью" указателя?



--------------------
вопросов больше чем ответов
PM MAIL   Вверх
mes
Дата 12.5.2010, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 144
Всего: 250



Цитата(Леопольд @  12.5.2010,  08:31 Найти цитируемый пост)
Что подразумевается под "битостью" указателя?

То, что указатель не указывает на валидный объект.



--------------------
PM MAIL WWW   Вверх
Леопольд
Дата 12.5.2010, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mes @  12.5.2010,  10:02 Найти цитируемый пост)
То, что указатель не указывает на валидный объект.
Цитата(Elfet @  11.5.2010,  13:00 Найти цитируемый пост)
Хранить указатель в другом классе в куче.
Не пойму, где тут связь? Какая разница где хранить указатель? Как место хранения может дать понять что объект, на который настроен указатель не валиден? smile 



--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Elfet
Дата 12.5.2010, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



Леопольд, посмотри как устроены умные указатели.  smile 


--------------------
PM MAIL WWW Skype   Вверх
bsa
Дата 12.5.2010, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 63
Всего: 196



Цитата(Elfet @  12.5.2010,  13:36 Найти цитируемый пост)
Леопольд, посмотри как устроены умные указатели. 
На "битость" даже shared_ptr не проверяет. Он предполагает, что программист не идиот: дал ему корректный указатель и не рулит указателем самостоятельно. Другими словами, даже если ты скормишь корректный указатель shared_ptr, но затем тут же освободишь память из-под объекта, на который он указывал, то при попытке уничтожить shared_ptr ты получишь в лучшем случае сегфолт (или access violation). Поэтому забудь про проверку.
Если ты уберешь семантику владения, то ты получишь утечки памяти. Или лишнюю усложненность кода.
Возможно, тебе стоит почитать о шаблонах проектирования. Очень может быть, что ты найдешь совершенно неожиданные способы решения своей проблемы.

PM   Вверх
Леопольд
Дата 12.5.2010, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Elfet @  12.5.2010,  13:36 Найти цитируемый пост)
Леопольд, посмотри как устроены умные указатели.
По разному...

Это сообщение отредактировал(а) Леопольд - 12.5.2010, 14:05


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Elfet
Дата 12.5.2010, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



bsa, да, конечно же умные указатели гораздо продуманнее чем мой указатель. Без семантики владения и подсчёта ссылок утечка памяти конечно же будет, однако если самому контролировать её (освобождать где нужно, использовать finally) то тоже всё будет хорошо.

Думаю напишу такой класс указателей, чисто так. Для себя, потренироваться. smile


--------------------
PM MAIL WWW Skype   Вверх
Леопольд
Дата 12.5.2010, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Elfet, finally в С++?


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Elfet
Дата 12.5.2010, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



Леопольд, ну, да smile Не совсем C++, но всё же можно, в VS __finally, в других можно обойтись define-ом.


--------------------
PM MAIL WWW Skype   Вверх
Леопольд
Дата 12.5.2010, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Elfet @  12.5.2010,  23:32 Найти цитируемый пост)
в других можно обойтись define-ом.
Мне как-то и в голову не приходило что это возможно, черкни, пожалуйста, здесь примерчик.


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Elfet
Дата 12.5.2010, 23:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



Код

#define finally(Saver) \
catch ( ... ) \
{ \
  Saver \
  throw; \
} \
Saver



--------------------
PM MAIL WWW Skype   Вверх
Леопольд
Дата 13.5.2010, 08:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Elfet, это далеко от аналога finally, который должен выполнятся всегда, независимо от того, было порождено/непорождено - перехвачено/неперехвачено исключение...
Этот выполняется если "порождено и не перехвачено", или "не порождено вовсе". Т.е. не хватает кейса "порождено и перехвачено".

Это сообщение отредактировал(а) Леопольд - 13.5.2010, 11:09


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Elfet
Дата 13.5.2010, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



Леопольд, ты имеешь ввиду это?
Код

try
{
    ...
}
catch(Error e)
{
    // тут не произойдёт удаления, поэтому нужно:
    delete obj;
}
finally( delete obj; );



--------------------
PM MAIL WWW Skype   Вверх
Леопольд
Дата 13.5.2010, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Elfet @  13.5.2010,  11:52 Найти цитируемый пост)
Леопольд, ты имеешь ввиду это?
smile 


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Elfet
Дата 13.5.2010, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



Леопольд, ну, да. Об этом нужно помнить smile


--------------------
PM MAIL WWW Skype   Вверх
boostcoder
Дата 13.5.2010, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

Репутация: 49
Всего: 110



вот я искренне не понимаю, зачем изобретать еще один смарт-поинтер? smile 
тех что в boost, хватает с запасом. или что?
PM WWW   Вверх
Elfet
Дата 14.5.2010, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



boostcoder, да, мне вполне хватает бустовских. То что я предлагаю это чуточку другое. Поинтер без RAII.  smile 


--------------------
PM MAIL WWW Skype   Вверх
boostcoder
Дата 14.5.2010, 06:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

Репутация: 49
Всего: 110



Цитата(Elfet @  14.5.2010,  00:20 Найти цитируемый пост)
Поинтер без RAII.

зачем?
PM WWW   Вверх
Elfet
Дата 14.5.2010, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



boostcoder, да, просто так. smile


--------------------
PM MAIL WWW Skype   Вверх
SenkraD
Дата 14.5.2010, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 23



Elfet,  посмотри тогда на Stl Soft от Метью Уилсона -
у него было что-то подобное, если не ошибаюсь.


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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