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:
    ... // в общем не получается
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 7.2.2011, 0:59
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


Цитата(daorus @ 7.2.2011, 0:42) *
foreach(QString cursor, mys) delete mys[cursor];
тут можно было воспользоваться qDeleteAll()
Цитата(daorus @ 7.2.2011, 0:42) *
как правильно отнаследовать от QHash

class QStrHash : public QHash<QString, MyDataModel*>
{
public:
    ... // в общем должно получиться
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
daorus
  опции профиля:
сообщение 7.2.2011, 10:36
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 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
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 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();
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 7.2.2011, 16:56
Сообщение #5


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


daorus,
почитай стандарт как правильно реализовывать шаблоны.
ну или книгу какую нить.
+ у тебя опечатка в заголовочнике
template<class StroreData>
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 7.2.2011, 20:19
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(daorus @ 7.2.2011, 17:21) *
вот так попробовал - не канает
загадочные фразы не пиши. Пиши суть.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
daorus
  опции профиля:
сообщение 9.2.2011, 10:39
Сообщение #7


Студент
*

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

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 7.2.2011, 22:19) *
загадочные фразы не пиши. Пиши суть.

Что такое "загадочная фраза"? Что означает этот термин?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.2.2011, 20:38
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(daorus @ 9.2.2011, 12:39) *
Что такое "загадочная фраза"? Что означает этот термин?
н-н-да, приехали.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 10.2.2011, 7:59
Сообщение #9


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  



ОФФ:


daorus, это такой специальный термин, на жаргоне программистов означает: телепаты набухались в зюзю, изволят спать и не могут нам помочь
как-то так :)

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

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


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




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