Кто-нибудь знает, как использовать 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 ?
Здравствуйте Андрей, Вы писали:
А>Кто-нибудь знает, как использовать auto_ptr с контейнерами типа vector и map ?
'std::auto_ptr' в принципе не может быть использован в качестве элемента контейнера. Он не удовлетворяет предъявляемым к элементу контейнера требованиям. В спецификации языка даже открытым текстом об этом сказано: 'std::auto_ptr' невозможно поместить в контейнер.
Здравствуйте Андрей Тарасевич, Вы писали:
АТ>Здравствуйте Андрей, Вы писали:
А>>Кто-нибудь знает, как использовать auto_ptr с контейнерами типа vector и map ?
АТ>'std::auto_ptr' в принципе не может быть использован в качестве элемента контейнера. Он не удовлетворяет предъявляемым к элементу контейнера требованиям. В спецификации языка даже открытым текстом об этом сказано: 'std::auto_ptr' невозможно поместить в контейнер.
А можете Вы подсказать альтернативный способ работы со smart-pointers в контейнерах? Писать каждый раз код очистки утомительно и чревато ошибками, а использовать такие контейнеры приходится достаточно часто.
Кстати, каким особым требованиям должен удовлетворять элемент контейнера?
Здравствуйте Андрей, Вы писали:
А>>>Кто-нибудь знает, как использовать auto_ptr с контейнерами типа vector и map ?
АТ>>'std::auto_ptr' в принципе не может быть использован в качестве элемента контейнера. Он не удовлетворяет предъявляемым к элементу контейнера требованиям. В спецификации языка даже открытым текстом об этом сказано: 'std::auto_ptr' невозможно поместить в контейнер.
А>А можете Вы подсказать альтернативный способ работы со smart-pointers в контейнерах? Писать каждый раз код очистки
на www.boost.org живет BOOST Library а в ней живет shared_ptr ... (и не только) — вот он удовлетворяет
всем требованиям (copy constructable and assignable)
Здравствуйте 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 тоже решает эту проблему — я лично не пробовал