cliear() и так выполнится при вызове деструктора списка. Но только не освободит память из под них, обратите внимание, что у меня в списке содержатся указатели.
это не является стандартным поведением. а что вы будите делать если в свой вариант контейнера захотите помещать не указатели?
Он то как раз и сделать класс для хранения указателей. К тому же можно добавить свойство типа ownObjects. Если оно установлено, то указатели автоматически уничтожаются при разрушении списка.
p.s. Да, я знаю, что у QList невиртуальный деструктор.
Можно написать обёртку вокруг QList<MyClass *>
Использовать умные указатели, например, Qt-шные или какой-нибудь другой, легковесный
Добавлено 11:04
В принципе то что деструктор не виртуальный пофиг, если вы не будете удалять ваш класс через указатель на QList<T>, например:
C++ (Qt)
class MyList: public QList<MyObject *>
{
...
};
QList<MyObject *> *p = new MyList();
delete p; // ошибка, т.к. деструктор не виртуальный будет вызван только ~QList<MyObject *>
MyList *p2 = new MyList();
delete p2; // так правильно, будет вызван сначала ~MyList(), а потом ~List<MyObject *>
MyList p3; // тоже правильно