我有一个QHash<QString, myClass*> objects
,为了插入我做了以下事情:
myClass *value = objects.value(key);
if(!value) {
value = new myClass;
objects.insert(key, value);
}
这是正确的方法吗?
答案 0 :(得分:2)
您的解决方案是几种可能的正确方法之一。
我通常这样做,因为我发现它更具可读性
if( !objects.contains( key ) )
{
objects.insert( key, new MyClass );
}
MyClass* value = objects.value( key);
正如Marek R已经建议的那样,您可以使用智能指针来简化内存管理:
QHash< QString, QSharedPointer< MyClass > > objects;
// ...
QSharedPointer< MyClass > value = objects.value( key );
从C ++ 11开始,我更喜欢使用std::shared_ptr。
这使您可以不关心delete
来电;确保始终使用QSharedPointer< MyClass >
代替MyClass*
。此外,您不能对具有父对象的QObject子类使用共享指针,因为父对象将为其存储常规指针。