Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > семантика владения для intrusive/shared buffers?


Автор: boostcoder 2.5.2012, 20:21
привет.

имеем объект типа yas::binary_mem_oarchive.
у него есть метод get_intrusive_buffer(), возвращающий объект типа intrusive_buffer, который реализован так:
Код

struct intrusive_buffer {
    intrusive_buffer(const void* data, std::size_t size)
        :data(data)
        ,size(size)
    {}
    intrusive_buffer(const intrusive_buffer& o)
        :data(o.data)
        ,size(o.size)
    {}

    const void* data;
    const std::size_t size;

private:
    intrusive_buffer();
};


т.е. intrusive_buffer не владеет данными.

используется это дело так:
Код

yas::binary_mem_oarchive oa;
oa & 33 & "44" & std::string("55");

...

intrusive_buffer buf = oa.get_intrusive_buffer();


сейчас же, решил добавить shared_buffer(по сути, тот же intrusive_buffer но массив хранится в shared_ptr`е) который обладает семантикой владения, и тут появилось три вопроса:
1. раз уж shared_buffer обладает семантикой владения, то он должен создавать копию данных из binary_mem_oarchive, или же сам binary_mem_oarchive должен хранить данные в объекте shared_buffer и возвращать его же?
2. первый и очевидный способ инициализации объекта shared_buffer выглядит так:
Код

yas::binary_mem_oarchive oa;
oa & 33 & "44" & std::string("55");
shared_buffer buf = oa.get_shared_buffer();

   нужно ли позволить инициализировать объекты типа shared_buffer из объектов intrusive_buffer? я думаю что нет.
3. нужно ли позволить инициализировать объекты типа intrusive_buffer из объектов shared_buffer?

спасибо.

Автор: boostcoder 8.5.2012, 15:06
жуть сколько ответов за целую неделю, смочь бы прочесть их все smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)