我一直在试图理解如何将它作为const引用传递。了解通过引用传递的QScopedPointer
我有以下类:
class DBContext : public QObject
在我的课堂主窗口我把它定义为folows:
private:
QScopedPointer<DBContext> dbContext;
存储类别是如何定义的:
class StorageData : public QObject
{
Q_OBJECT
public:
StorageData(QObject *parent = 0);
~StorageData();
void SetDBContext(const QScopedPointer<DBContext> &db_context);
private:
QScopedPointer<DBContext> dbContext;
在StorageData SetDBContext ()我尝试将它分配给以下内容:
void StorageData::SetDBContext(const QScopedPointer<DBContext> &db_context)
{
dbContext = db_context;
}
然后在主窗口的构造函数初始化:
dbContext.reset(new DBContext(this));
StorageData storage;
storage.SetDBContext(dbContext);
使用下面的StorageData功能SetDBContext():
_DBContext = db_context;
我得到一个错误:
“QScopedPointer> :: operator =':无法访问在'QScopedPointer'类中声明的私有成员''
更新
以使用QSharedPointer和QWeakPointer的提示。这是使用这两个指针的有效方法吗?我是否也同时在A类& B上正确使用clear()?
class A
private:
QWeakPointer<DBContext> dbContext;
void A::~A()
{
dbContext.clear()
}
void A::SetDBContext(QWeakPointer<DBContext> db_context)
{
dbContext= db_context;
}
void A::UseCode()
{
QSharedPointer<DBContext> ptrContext= dbContext.toStrongRef();
..
}
class B constructor:
private:
QSharedPointer<DBContext> dbContext;
在构造:
B::B()
{
dbContext.reset(new DBContext(this));
QWeakPointer<DBContext> ptrDBConnect = dbContext;
storage.SetDBContext(ptrDBConnect);
}
在析构函数:
B::~B()
{
dbContext.clear();
}
什么是_DBContext?它没有显示在你的代码中。 –
我输入错误。它应该是dbContext。 – adviner