将动态分配的对象插入QHash

时间:2013-11-29 11:53:10

标签: qt dynamic-allocation

我有一个QHash<QString, myClass*> objects,为了插入我做了以下事情:

myClass *value = objects.value(key);
    if(!value) {
        value = new myClass;
        objects.insert(key, value);
    }

这是正确的方法吗?

1 个答案:

答案 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子类使用共享指针,因为父对象将为其存储常规指针。