我在我的应用程序Qt QSharedDataPointer多继承菱形模式?
class GroupElement : public QSharedData
{
public:
int Id;
int GroupIndex;
QString Title;
QSharedDataPointer<AccessDescriptor> pAccessDescriptor;
QString Owner;
};
class Class2 : public GroupElement
{
public:
QSharedDataPointer<QList<int> > Categories;
// ... many other class members
}
class3 : public QObject
{
Q_OBJECT
public:
template <class T> QSharedDataPointer<QList<T> > toTQList(QVariant qv);
//...more ....
}
的.h文件中定义在另一个函数2班我尝试将值分配给“分类”
QSharedDataPointer<Class2>
Class3::afunction(QVariantMap o)
{
QSharedDataPointer<Class2> getResult(new Class2());
getResult-> Categories = toTQList<int>(o["Categories"]);
// ... more code ...
}
当编译代码所示,编译器抱怨“class ...没有名为'ref'的成员”。这通常表示我需要将公共QSharedData添加为基类。但是在这种情况下,Class2已经从具有QSharedData作为基类的GroupElement派生。如果我将QSharedData作为基类添加到第2类,我会收到警告消息“直接基础”'Class2'中的QSharedData'不可访问,但我认为可能会遇到多重继承的'钻石问题'之一,米没有足够的经验在Qt的或C++知道如何解决它。
帮助将不胜感激。
我使用QSharedDataPointer的原因是因为我阅读了您引用的文章。我不想使用简单的指针来避免内存泄漏。我想我误解了这篇文章,并认为如果我想确保底层数据没有被删除,那么QSharedDataPointer是必需的。我猜只要我只通过QSharedPointer访问数据,我应该没问题。 – DarwinIcesurfer