crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Наследование от QHash
daorus
  опции профиля:
сообщение 7.2.2011, 0:42
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 30.10.2010
Пользователь №: 2163

Спасибо сказали: 0 раз(а)




Репутация:   0  


Подскажите, пожалуйста, как правильно отнаследовать от QHash, чтобы в итоге расширенный класс (наследник) получил следующие возможности: принимал только один параметр - тип хранимых ссылок, и по clean() не только массив очищал, но и делал delete всех объектов, по ссылкам которые в нем хранятся.

например сейчас приходится так
QHash<QString, MyDataModel*> mys;
mys["one"] = new MyDataModel;
mys["two"] = new MyDataModel;
...
foreach(QString cursor, mys) delete mys[cursor];
mys.clean();


а хочется
QStrHash<MyDataModel*> mys;
mys["one"] = new MyDataModel;
mys["two"] = new MyDataModel;
...
mys.clean(); // и гарантированно утечек не будет


пробовал сам, но чё-то не догоняю
template <class Store> QStrHash : public QHash
{
public:
    ... // в общем не получается
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
daorus
  опции профиля:
сообщение 7.2.2011, 10:36
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 30.10.2010
Пользователь №: 2163

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(igor_bogomolov @ 7.2.2011, 2:59) *
qDeleteAll()

Игорь, спасибо, конечно за наводку. Вот так я додумал вашу идею.

void qKillHash(const Container &c) { qDeleteAll(c); c.clear(); }


но если кто-нибудь откликнется по поводу как отнаследовать и сделать свой класс хеша, то очень буду благодарен.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
daorus
  опции профиля:
сообщение 7.2.2011, 15:21
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 30.10.2010
Пользователь №: 2163

Спасибо сказали: 0 раз(а)




Репутация:   0  


вот так попробовал - не канает

qstrhash.h
#include <QHash>
#include <QString>
template<class StroreData>
class QStrHash : public QHash<QString, StoreData*>
{
public:
    clear();
}


qstrhash.cpp
#include "qstrhash.h"
template<class StoreData>
QStrHash<StoreData> :: clear()
{
    qDeleteAll(*this);
    QHash::clear();
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.1.2025, 2:17