私が開発しているライブラリには、あらゆる種類のデータを格納するハッシュが必要なクラスがあります。これは、このライブラリを使用するアルゴリズムが、そのクラスのオブジェクトに特定のデータを格納したい場合があるためです。
このクラスは「ObjectOfInterest」と呼ばれ、QTを使用してハッシュを定義しました。
QHash<QString, void*> properties;
次に、情報を格納するためにこの関数を実装しました。
bool ObjectOfInterest::hasProperty(QString prop) const
{
return properties.contains(prop);
}
template <class T> const T& ObjectOfInterest::getProperty(const QString prop) const
{
return *(T *)properties.value(prop);
}
template <class T> void ObjectOfInterest::setProperty(const QString prop, T value)
{
if (hasProperty(prop)) deletePropertyValue<T>(prop);
properties.insert(prop, new T(value));
}
//private
template <class T> void ObjectOfInterest::deletePropertyValue(const QString prop)
{
delete (T *)properties.value(prop);
}
ここで問題は、「ObjectOfInterest」のオブジェクトを削除するときに、プロパティハッシュに格納されているすべての値を削除するにはどうすればよいですか?今のところ私は持っています
ObjectOfInterest::~ObjectOfInterest()
{
//delete other stuff...
QHash<QString, void*>::iterator i;
for (i = properties.begin(); i != properties.end(); ++i)
{
delete i.value();
}
}
しかし、私はデストラクタを呼び出していないので、これは解決策ではありません。これを行う方法はありますか?
ありがとう!