boost::shared_ptr и хенделы типа int
От: Аноним  
Дата: 06.06.08 09:40
Оценка:
День добрый.

boost::shared_ptr можно использовать для закрытия хенделов таким образом:
void* hSomeHandle=CreateSomeHandle(...);
boost::shared_ptr<void> xxx( hSomeHandle, ::CloseHandle );



Теперь о проблеме имеется некоторая библиотека, в которой хендел — это int, а не void*.
Можно ли тут как-нибудь использовать буст?
boost shared_ptr
Re: boost::shared_ptr и хенделы типа int
От: VoidEx  
Дата: 06.06.08 13:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Теперь о проблеме имеется некоторая библиотека, в которой хендел — это int, а не void*.

А>Можно ли тут как-нибудь использовать буст?

Конкретно int можно хранить как void*.
Можно хранить int* (соот-но, удалять и хендл, и потом память под int), тогда и с точки зрения стандарта всё хорошо.
Лично у меня есть такое

typedef handle<int, 0, void (&)(int), some_delete> h_int;
shared<h_int> p;
scoped<h_int> s;
weak<h_int> w = p;
Re[2]: boost::shared_ptr и хенделы типа int
От: Кодт Россия  
Дата: 06.06.08 23:17
Оценка:
Здравствуйте, VoidEx, Вы писали:

VE>Лично у меня есть такое

VE>
VE>typedef handle<int, 0, void (&)(int), some_delete> h_int;
VE>shared<h_int> p;
VE>scoped<h_int> s;
VE>weak<h_int> w = p;
VE>


1. Поделись исходниками?
2. А зачем weak в случае хэндлов? С указателями понятно, чтоб избежать закольцовывания. Но с хэндлами проблема вроде бы не стоит. Хотя, если там какая-нибудь регистрация зависимостей...
Перекуём баги на фичи!
Re[2]: boost::shared_ptr и хенделы типа int
От: Аноним  
Дата: 07.06.08 10:22
Оценка:
Здравствуйте, VoidEx, Вы писали:

VE>Конкретно int можно хранить как void*.

Неудобно будет пользоватся. Нужно будет ручками преобразовывать в int.
Разве что такой вариант:
class IntHandle
{
public:
   // добавить operator приведения к инту при желание
   int getHandle()
  {
     return (int)data.get();
  }
private:
   boost::shared_ptr<void>  data;
};


VE>Можно хранить int* (соот-но, удалять и хендл, и потом память под int), тогда и с точки зрения стандарта всё хорошо.

хипу дергать жалко
Re[3]: boost::shared_ptr и хенделы типа int
От: VoidEx  
Дата: 07.06.08 10:29
Оценка:
Здравствуйте, Кодт, Вы писали:

К>1. Поделись исходниками?

К>2. А зачем weak в случае хэндлов? С указателями понятно, чтоб избежать закольцовывания. Но с хэндлами проблема вроде бы не стоит. Хотя, если там какая-нибудь регистрация зависимостей...

1. Писал на коленке, вечером выложу
2. Ну раз написал shared, то почему б не сделать weak, кода не так много
Re[4]: boost::shared_ptr и хенделы типа int
От: Кодт Россия  
Дата: 07.06.08 10:36
Оценка:
Здравствуйте, VoidEx, Вы писали:

VE>2. Ну раз написал shared, то почему б не сделать weak, кода не так много


Можно совместное владение сделать на двусвязном списке (linked_ptr), тогда не потребуется динамически размещать счётчик на куче.
Правда, список придётся делать lock-free.
Ну и weak на linked — нетривиально...
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.