在我正在开发的一个库中,我有一个类,我想要一个存储任何类型数据的哈希。这是因为使用此库的算法可能希望将特定数据存储在该类的对象中。
该类称为“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();
}
}
但这不是解决方案,因为我没有调用析构函数。任何想法如何做到这一点?
谢谢!