STL
От: Андрей Россия  
Дата: 02.11.01 07:39
Оценка:
Кто-нибудь знает, как использовать auto_ptr с контейнерами типа vector и map ?
Поясню на примере:

#include <memory>
#include <vector>

class CClass
{
public:
CClass() {}
~CClass() {}
};

int main()
{
std::vector< std::auto_ptr<CClass> > my_vector;

for (int i = 0; i < 5; i++)
my_vector.push_back(std::auto_ptr<CClass>(new CClass()));

return 0;
}

Проблема в том, что этот пример прекрасно компилируется с Visual C++ 6.0 с его версией STL, но не работает с версией STL от Silicon Graphics, а также с Borland C++ Builder.
Я понимаю, что проблема в компиляторе Visual C++, но меня интересует, есть ли какой-нибудь не очень извратный способ использовать приведенный выше код с версией STL от Silicon Graphics ?
Re: STL
От: Андрей Тарасевич Беларусь  
Дата: 02.11.01 08:07
Оценка:
Здравствуйте Андрей, Вы писали:

А>Кто-нибудь знает, как использовать auto_ptr с контейнерами типа vector и map ?


'std::auto_ptr' в принципе не может быть использован в качестве элемента контейнера. Он не удовлетворяет предъявляемым к элементу контейнера требованиям. В спецификации языка даже открытым текстом об этом сказано: 'std::auto_ptr' невозможно поместить в контейнер.
Best regards,
Андрей Тарасевич
Re[2]: STL
От: Андрей Россия  
Дата: 02.11.01 10:07
Оценка:
Здравствуйте Андрей Тарасевич, Вы писали:

АТ>Здравствуйте Андрей, Вы писали:


А>>Кто-нибудь знает, как использовать auto_ptr с контейнерами типа vector и map ?


АТ>'std::auto_ptr' в принципе не может быть использован в качестве элемента контейнера. Он не удовлетворяет предъявляемым к элементу контейнера требованиям. В спецификации языка даже открытым текстом об этом сказано: 'std::auto_ptr' невозможно поместить в контейнер.


А можете Вы подсказать альтернативный способ работы со smart-pointers в контейнерах? Писать каждый раз код очистки утомительно и чревато ошибками, а использовать такие контейнеры приходится достаточно часто.
Кстати, каким особым требованиям должен удовлетворять элемент контейнера?

Заранее спасибо, Алифанов Андрей.
Re[3]: STL
От: Igor Soukhov  
Дата: 02.11.01 14:09
Оценка:
Здравствуйте Андрей, Вы писали:

А>>>Кто-нибудь знает, как использовать auto_ptr с контейнерами типа vector и map ?


АТ>>'std::auto_ptr' в принципе не может быть использован в качестве элемента контейнера. Он не удовлетворяет предъявляемым к элементу контейнера требованиям. В спецификации языка даже открытым текстом об этом сказано: 'std::auto_ptr' невозможно поместить в контейнер.


А>А можете Вы подсказать альтернативный способ работы со smart-pointers в контейнерах? Писать каждый раз код очистки

на www.boost.org живет BOOST Library а в ней живет shared_ptr ... (и не только) — вот он удовлетворяет
всем требованиям (copy constructable and assignable)
* thriving in a production environment *
Re[4]: STL
От: ZORK Россия www.zorkaltsev.com
Дата: 02.11.01 16:12
Оценка:
Здравствуйте Igor Soukhov, Вы писали:

IS>Здравствуйте Андрей, Вы писали:


А>>>>Кто-нибудь знает, как использовать auto_ptr с контейнерами типа vector и map ?


АТ>>>'std::auto_ptr' в принципе не может быть использован в качестве элемента контейнера. Он не удовлетворяет предъявляемым к элементу контейнера требованиям. В спецификации языка даже открытым текстом об этом сказано: 'std::auto_ptr' невозможно поместить в контейнер.


А>>А можете Вы подсказать альтернативный способ работы со smart-pointers в контейнерах? Писать каждый раз код очистки

IS>на www.boost.org живет BOOST Library а в ней живет shared_ptr ... (и не только) — вот он удовлетворяет
IS>всем требованиям (copy constructable and assignable)

Вроде CAdapt в ATL тоже решает эту проблему — я лично не пробовал

-Zork
Думать надо ...головой :)
Re[5]: STL
От: Андрей Россия  
Дата: 05.11.01 04:14
Оценка:
Здравствуйте ZORK, Вы писали:

ZORK>Вроде CAdapt в ATL тоже решает эту проблему — я лично не пробовал



Действительно, решает. Большое спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.