Re: Контейнер распределённых указателей
От: sraider http://dvinogradov.blogspot.com
Дата: 24.08.07 15:27
Оценка:
А>Подскажите, пожалуйста, можно ли обойти ограничение std::auto_ptr<>, согласно которому его нельзя класть в контейнер?
А>Мне нужно хранить в контейнере указатели, полученные с помощью new и не хотелось бы вручную вызывать delete.

Хранить auto_ptr нельзя, т.к. у него разрушающее копирование. Если копирования не будет (некоторые реализации std::vector с вызовом reserve или std::list), то и проблем не будет.

Тебе видимо нужно это: http://boost.org/libs/ptr_container/doc/ptr_container.html
Re[3]: Контейнер распределённых указателей
От: sraider http://dvinogradov.blogspot.com
Дата: 24.08.07 15:30
Оценка: +1 :))) :)
А>>boost::shared_ptr
А>К сожалению, буст не используем.

тогда tr1::shared_ptr
Re[8]: Контейнер распределённых указателей
От: Кодт Россия  
Дата: 24.08.07 15:36
Оценка: +1 :))
Здравствуйте, CreatorCray, Вы писали:

CC>Это решает только одну проблему. Громозкость и тормознутость буста увы не исправить... Хотя есть в нем неплохие вещи..


shared_ptr — громоздкий и тормозной?!
Как сказать "вау" наоборот?
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[8]: Контейнер распределённых указателей
От: WolfHound  
Дата: 24.08.07 15:58
Оценка: +1
Здравствуйте, _uncle, Вы писали:

_>Пес его знает какие в ней еще баги зарыты — поддержка может оказаться весьма дорогой. Особенно в системах 24*365. Бывает и от STL отказываются

Я какраз пишу 24*365 системы. Вот с чем проблем небыло ниразу так это с boost'ом и stl'ем.
Что я не так делаю?
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: Контейнер распределённых указателей
От: WolfHound  
Дата: 24.08.07 15:58
Оценка: +1
Здравствуйте, <Аноним>, Вы писали:

А>Что касается топика, то неужели все либо используют буст, либо сидят на своих велосипедах?

А>Ведь задача, ИМХО, распространённая.
А boost это и есть набор велосипедов для распространенных задач.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: Контейнер распределённых указателей
От: WolfHound  
Дата: 24.08.07 15:58
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Это решает только одну проблему. Громозкость и тормознутость буста увы не исправить... Хотя есть в нем неплохие вещи..

А в каком месте он тормозной?
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: Контейнер распределённых указателей
От: Kubroid  
Дата: 24.08.07 18:08
Оценка: :)
K>>вторая, неофициальная — никто в нем нихрена не понимает, как и в c++...
А>А попробывать изучить?!
учиться ????
на это нет время — надо кривой колотить код!
и отлаживать его.
Re[9]: Контейнер распределённых указателей
От: Аноним  
Дата: 24.08.07 18:54
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, _uncle, Вы писали:


_>>Пес его знает какие в ней еще баги зарыты — поддержка может оказаться весьма дорогой. Особенно в системах 24*365. Бывает и от STL отказываются

WH>Я какраз пишу 24*365 системы. Вот с чем проблем небыло ниразу так это с boost'ом и stl'ем.
WH>Что я не так делаю?

Значит не используете их в полной мере. Не бывает продуктов без багов.
Re[10]: Контейнер распределённых указателей
От: Awaken Украина  
Дата: 24.08.07 19:01
Оценка:
>Значит не используете их в полной мере. Не бывает продуктов без багов.

не бывает вообще софта без багов. и что его — не использовать что ли?
в библиотеках Microsoft тоже прилично багов находили ,тем не менее многие используют MFC и ATL.
и даже в 24x7 серверных приложениях. чем положение boost хуже?
Re[10]: Контейнер распределённых указателей
От: WolfHound  
Дата: 24.08.07 19:36
Оценка:
Здравствуйте, <Аноним>, Вы писали:

WH>>Я какраз пишу 24*365 системы. Вот с чем проблем небыло ниразу так это с boost'ом и stl'ем.

WH>>Что я не так делаю?

А>Значит не используете их в полной мере.

А что по твоему в полной мере?

А>Не бывает продуктов без багов.

По этому я и пишу системы устойчивые к программным и аппаратным сбоям. Вроде даже получается.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: Контейнер распределённых указателей
От: Андрей Коростелев Голландия http://www.korostelev.net/
Дата: 24.08.07 19:39
Оценка: :))
Здравствуйте, Кодт, Вы писали:

CC>>Это решает только одну проблему. Громозкость и тормознутость буста увы не исправить... Хотя есть в нем неплохие вещи..


К>shared_ptr — громоздкий и тормозной?!

К>Как сказать "вау" наоборот?

Так?
-- Андрей
Re[9]: Контейнер распределённых указателей
От: Sergey Россия  
Дата: 24.08.07 20:56
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

CC>>Это решает только одну проблему. Громозкость и тормознутость буста увы не исправить... Хотя есть в нем неплохие вещи..

WH>А в каком месте он тормозной?

Ну положим тормознутых мест в бусте хватает. Например, сериализация. Спирит тоже не особо блещет.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[7]: Контейнер распределённых указателей
От: Erop Россия  
Дата: 24.08.07 22:21
Оценка: +1
Здравствуйте, Kubroid, Вы писали:

K>учиться ????

K>на это нет время — надо кривой колотить код!
K>и отлаживать его.

Вот во всех таких вот амбициозных заявах меня всегда смущает то, что люди которые смогли чему-то где-то выучиться учат людей, которые что-то где-то смогли сделать. Так бывает не всегда, но часто, так как с опытом люди начинают понимать, что вопросы типа "буст или не буст" не главные...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Контейнер распределённых указателей
От: Аноним  
Дата: 26.08.07 12:42
Оценка:
Здравствуйте, Аноним, Вы писали:

А>boost::shared_ptr


Реализация такого простого smarta тривиальна. Только ради него юзать boost (если почему-то нет желания) не стоит. К тому же в boost он содержит дополнительный счетчик для совместного использования с boost::weak_ptr. Рассмотрите еще возможность внедерения счетчика в классы хранимых данных, что избавляет от дополнительных операций с динамической памятью.
Re[3]: Контейнер распределённых указателей
От: Cyberax Марс  
Дата: 26.08.07 12:55
Оценка: -1
Здравствуйте, Аноним, Вы писали:

А>>boost::shared_ptr

А>Реализация такого простого smarta тривиальна. Только ради него юзать boost (если почему-то нет желания) не стоит. К тому же в boost он содержит дополнительный счетчик для совместного использования с boost::weak_ptr. Рассмотрите еще возможность внедерения счетчика в классы хранимых данных, что избавляет от дополнительных операций с динамической памятью.
Не так уж и тривиальна. Кстати, в Boost есть еще intrusive_ptr.
Sapienti sat!
Re[4]: Контейнер распределённых указателей
От: Аноним  
Дата: 26.08.07 13:17
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Не так уж и тривиальна. Кстати, в Boost есть еще intrusive_ptr.


template <typename T> class shared_ptr {
public:
inline explicit shared_ptr(T* p):
m_p(p), m_pc(new int(1))
{}

inline shared_ptr(const shared_ptr& sp):
m_p(sp.m_p), m_pc(sp.m_pc)
{ ++*m_pc; }

inline ~shared_ptr()
{ unref(); }

shared_ptr& operator=(const shared_ptr& sp)
{
if (this != &sp)
{
unref();
m_p = sp.m_p;
m_pc = sp.m_pc;
++*m_pc;
}
return *this;
}

inline T& operator*() const { return *m_p; }
inline T* operator->() const { return m_p; }

inline bool ok() const { return m_p != 0; }
inline bool null() const { return m_p == 0; }

inline T* get() const { return m_p; }
inline void set(T* p)
{
unref();
m_p = p;
m_pc = new int(1);
}

inline void destroy()
{
unref();
m_p = 0;
m_pc = new int(1);
}

private:
T* m_p;
int* m_pc;

inline void unref() { if (!--*m_pc) { delete m_p; delete m_pc; } }
};

Если без мьютексов — то всё!
Re[9]: Контейнер распределённых указателей
От: CreatorCray  
Дата: 27.08.07 06:30
Оценка:
Здравствуйте, Кодт, Вы писали:

CC>>Это решает только одну проблему. Громозкость и тормознутость буста увы не исправить... Хотя есть в нем неплохие вещи..

К>shared_ptr — громоздкий и тормозной?!
Я вообще то говорил про весь буст
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Контейнер распределённых указателей
От: IROV..  
Дата: 27.08.07 10:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подскажите, пожалуйста, можно ли обойти ограничение std::auto_ptr<>, согласно которому его нельзя класть в контейнер?

А>Мне нужно хранить в контейнере указатели, полученные с помощью new и не хотелось бы вручную вызывать delete.

если гора не идет к Магомеду, тогда Магомед пойдет к горе


а что если не указатель модифицировать а контейнер?

например( пишу навскидку)

template<class T>
class auto_ptr_vector
: public std::vector<T>
{
  auto_ptr_vector();
  ~auto_ptr_vector();
  {
    for each( T t in *this)
    {
      delete t;
    }
   }
};




З.Ы. кстати в бусте такое тоже есть, но раз такое с бустом то самому это написать не так уж и сложно
я не волшебник, я только учусь!
Re[10]: Контейнер распределённых указателей
От: WolfHound  
Дата: 27.08.07 11:34
Оценка: 6 (1)
Здравствуйте, Sergey, Вы писали:

S>Ну положим тормознутых мест в бусте хватает. Например, сериализация. Спирит тоже не особо блещет.

Те из-за пары тормознутых либ нельзя использовать другие либы?
boost не смотря на заявления некоторых товарищей ни разу не монолит.
И многими либами можно спокойно пользоваться не тоща за собой другие либы.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: Контейнер распределённых указателей
От: Erop Россия  
Дата: 27.08.07 11:56
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>boost не смотря на заявления некоторых товарищей ни разу не монолит.

WH>И многими либами можно спокойно пользоваться не тоща за собой другие либы.

Ну пролема не в том, что boost монолтен, а в том, что нет удобной готовой инфраструктуры, для использования его "по частям"
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.