Есть такой код:
#include <list>
#include <stdio.h>
using namespace std;
class MyClass
{
public:
MyClass(int id);
~MyClass();
private:
int m_id;
};
int main(int argc, char * argv[])
{
list<MyClass*> m_list;
int i;
for (i = 1; i <= 4; ++i)
{
MyClass * m_myClass = new MyClass(i);
m_list.push_back(m_myClass);
}
m_list.clear();
return 0;
}
MyClass::MyClass(int id)
: m_id(id)
{
printf("MyClass::MyClass(%d)\n", id);
}
MyClass::~MyClass()
{
printf("MyClass::~MyClass(%d)\n", m_id);
}
Суть в том, что я циклически создаю объекты и помещаю их в list. Но как мне потом средствами самого list удалить все объекты из памяти? Или прийдётся ето делать вручную?
Вывод программы такой:
MyClass::MyClass(1)
MyClass::MyClass(2)
MyClass::MyClass(3)
MyClass::MyClass(4)
деструкторы класса не срабатывают. Может, я не правильно понимаю документацию, но здесь http://www.cplusplus.com/reference/list/list/clear/ написано:
All the elements in the list container are dropped: their destructors are called, and then they are removed from the list container, leaving it with a size of 0.
почему тогда в моём случае деструкторы не вызываются?