Initialize all data members in QNetworkAccessCache::CacheableObject

Address the "A constructor must initialize all data members of the
class" warning.

The class should accept initial values as argument of a (possibly
protected) constructor if it expects them to be set by a derived
class.

Add an enum Option and a protected constructor that can be called
by the derived classes with the enum values.
This makes setExpires and setShareable redundant so remove them.

Found by an Axivion scan.

Pick-to: 6.7 6.5
Task-number: QTBUG-125026
Change-Id: Ia8a2a19469a2c0185b5d2e6b2a0895e897f33f28
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
(cherry picked from commit 36aa5fc3fa361ecb6f7bb035c3cace3dd14735e0)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Mate Barany 2024-07-05 14:41:02 +02:00 committed by Qt Cherry-pick Bot
parent b17e92952a
commit 779ff8f333
4 changed files with 17 additions and 22 deletions

View File

@ -151,9 +151,9 @@ public:
QNetworkAccessCachedHttpConnection(quint16 connectionCount, const QString &hostName, quint16 port, bool encrypt, bool isLocalSocket,
QHttpNetworkConnection::ConnectionType connectionType)
: QHttpNetworkConnection(connectionCount, hostName, port, encrypt, isLocalSocket, /*parent=*/nullptr, connectionType)
,CacheableObject(Option::Expires | Option::Shareable)
{
setExpires(true);
setShareable(true);
}
virtual void dispose() override

View File

@ -22,9 +22,8 @@ class QNetworkAuthenticationCache : private QList<QNetworkAuthenticationCredenti
{
public:
QNetworkAuthenticationCache()
: CacheableObject(Option::Shareable)
{
setExpires(false);
setShareable(true);
reserve(1);
}

View File

@ -31,10 +31,11 @@ struct QNetworkAccessCache::Node
int useCount = 0;
};
QNetworkAccessCache::CacheableObject::CacheableObject()
QNetworkAccessCache::CacheableObject::CacheableObject(Options options)
: expires(options & Option::Expires),
shareable(options & Option::Shareable)
{
// leave the members uninitialized
// they must be initialized by the derived class's constructor
}
QNetworkAccessCache::CacheableObject::~CacheableObject()
@ -46,16 +47,6 @@ QNetworkAccessCache::CacheableObject::~CacheableObject()
#endif
}
void QNetworkAccessCache::CacheableObject::setExpires(bool enable)
{
expires = enable;
}
void QNetworkAccessCache::CacheableObject::setShareable(bool enable)
{
shareable = enable;
}
QNetworkAccessCache::~QNetworkAccessCache()
{
clear();

View File

@ -19,6 +19,7 @@
#include "QtCore/qobject.h"
#include "QtCore/qbasictimer.h"
#include "QtCore/qbytearray.h"
#include <QtCore/qflags.h>
#include "QtCore/qhash.h"
#include "QtCore/qmetatype.h"
@ -36,7 +37,6 @@ class QNetworkAccessCache: public QObject
public:
struct Node;
typedef QHash<QByteArray, Node *> NodeHash;
class CacheableObject
{
friend class QNetworkAccessCache;
@ -45,14 +45,17 @@ public:
bool shareable;
qint64 expiryTimeoutSeconds = -1;
public:
CacheableObject();
enum class Option {
Expires = 0x01,
Shareable = 0x02,
};
typedef QFlags<Option> Options; // #### QTBUG-127269
virtual ~CacheableObject();
virtual void dispose() = 0;
inline QByteArray cacheKey() const { return key; }
protected:
void setExpires(bool enable);
void setShareable(bool enable);
explicit CacheableObject(Options options);
};
~QNetworkAccessCache();
@ -85,6 +88,8 @@ private:
bool emitEntryReady(Node *node, QObject *target, const char *member);
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QNetworkAccessCache::CacheableObject::Options)
QT_END_NAMESPACE
#endif