Skip to content

Commit b9cb1df

Browse files
committed
Refactoring: apply rule of 0 or rule of 5 for special members (part 2)
1 parent aa55cc8 commit b9cb1df

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+218
-156
lines changed

libxml/xml.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,13 @@ class XMLHandlers
5555
class XMLLocator
5656
{
5757
public:
58-
virtual ~XMLLocator() {}
58+
XMLLocator() = default;
59+
XMLLocator(const XMLLocator &) = delete;
60+
XMLLocator &operator=(const XMLLocator &) = delete;
61+
XMLLocator(XMLLocator &&) = delete;
62+
XMLLocator &operator=(XMLLocator &&) = delete;
63+
virtual ~XMLLocator() = default;
64+
5965
virtual int lineNr() const = 0;
6066
virtual std::string fileName() const = 0;
6167
};
@@ -72,6 +78,10 @@ class XMLParser : public XMLLocator
7278
XMLParser(const XMLHandlers &handlers);
7379
/*! Destructor */
7480
~XMLParser();
81+
XMLParser(const XMLParser &) = delete;
82+
XMLParser &operator=(const XMLParser &) = delete;
83+
XMLParser(XMLParser &&) = delete;
84+
XMLParser &operator=(XMLParser &&) = delete;
7585

7686
using Transcode = bool(std::string &,const char *);
7787

src/classdef.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,9 @@ class ClassDefAliasImpl : public DefinitionAliasMixin<ClassDef>
417417
public:
418418
ClassDefAliasImpl(const Definition *newScope,const ClassDef *cd)
419419
: DefinitionAliasMixin(newScope,cd) { init(); }
420-
~ClassDefAliasImpl() override { deinit(); }
420+
~ClassDefAliasImpl() override { deinit(); }
421+
NON_COPYABLE(ClassDefAliasImpl)
422+
421423
DefType definitionType() const override { return TypeClass; }
422424

423425
const ClassDef *getCdAlias() const { return toClassDef(getAlias()); }

src/classdef.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@ using ClassDefSet = std::unordered_set<const ClassDef*>;
103103
class ClassDef : public Definition
104104
{
105105
public:
106+
ABSTRACT_BASE_CLASS(ClassDef)
107+
106108
/** The various compound types */
107109
enum CompoundType { Class, //=Entry::CLASS_SEC,
108110
Struct, //=Entry::STRUCT_SEC,
@@ -408,6 +410,8 @@ class ClassDef : public Definition
408410
class ClassDefMutable : public DefinitionMutable, public ClassDef
409411
{
410412
public:
413+
ABSTRACT_BASE_CLASS(ClassDefMutable)
414+
411415
//-----------------------------------------------------------------------------------
412416
// --- setters ----
413417
//-----------------------------------------------------------------------------------

src/codefragment.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <memory>
2020

2121
#include "qcstring.h"
22+
#include "construct.h"
2223

2324
class OutputCodeList;
2425
class Definition;
@@ -39,6 +40,7 @@ class CodeFragmentManager
3940
private:
4041
CodeFragmentManager();
4142
~CodeFragmentManager();
43+
NON_COPYABLE(CodeFragmentManager)
4244

4345
struct Private;
4446
std::unique_ptr<Private> p;

src/commentscan.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#include <memory>
2020
#include "types.h"
21+
#include "construct.h"
2122

2223
class Entry;
2324
class OutlineParserInterface;
@@ -30,6 +31,7 @@ class CommentScanner
3031
public:
3132
CommentScanner();
3233
~CommentScanner();
34+
NON_COPYABLE(CommentScanner)
3335

3436
/** Invokes the comment block parser with the request to parse a
3537
* single comment block.

src/conceptdef.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class ConceptDefImpl : public DefinitionMixin<ConceptDefMutable>
3434
ConceptDefImpl(const QCString &fileName,int startLine,int startColumn,
3535
const QCString &name,const QCString &tagRef=QCString(),const QCString &tagFile=QCString());
3636
~ConceptDefImpl();
37+
NON_COPYABLE(ConceptDefImpl);
3738

3839
ConceptDef *resolveAlias() { return this; }
3940

@@ -103,6 +104,7 @@ class ConceptDefAliasImpl : public DefinitionAliasMixin<ConceptDef>
103104
ConceptDefAliasImpl(const Definition *newScope,const ConceptDef *cd)
104105
: DefinitionAliasMixin(newScope,cd) { init(); }
105106
~ConceptDefAliasImpl() override { deinit(); }
107+
NON_COPYABLE(ConceptDefAliasImpl)
106108

107109
const ConceptDef *getCdAlias() const { return toConceptDef(getAlias()); }
108110
ConceptDef *resolveAlias() { return const_cast<ConceptDef*>(getCdAlias()); }

src/conceptdef.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ class ModuleDef;
2626
class ConceptDef : public Definition
2727
{
2828
public:
29+
ABSTRACT_BASE_CLASS(ConceptDef)
30+
2931
virtual DefType definitionType() const = 0;
3032
virtual QCString getOutputFileBase() const = 0;
3133
virtual bool hasDetailedDescription() const = 0;
@@ -48,6 +50,8 @@ class ConceptDef : public Definition
4850
class ConceptDefMutable : public DefinitionMutable, public ConceptDef
4951
{
5052
public:
53+
ABSTRACT_BASE_CLASS(ConceptDefMutable)
54+
5155
virtual void setIncludeFile(FileDef *fd,const QCString &incName,bool local,bool force) = 0;
5256
virtual void setTemplateArguments(const ArgumentList &al) = 0;
5357
virtual void setNamespace(NamespaceDef *nd) = 0;

src/definition.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ class DeepCopyUniquePtr : public std::unique_ptr<T>
6969
if (*this!=other) this->reset(other ? new T(*other) : nullptr);
7070
return *this;
7171
}
72+
DeepCopyUniquePtr(DeepCopyUniquePtr &&other) : std::unique_ptr<T>(std::move(other)) {}
73+
DeepCopyUniquePtr &operator=(DeepCopyUniquePtr &&other)
74+
{
75+
std::unique_ptr<T>::operator=(std::move(other));
76+
return *this;
77+
}
78+
~DeepCopyUniquePtr() = default;
7279
};
7380

7481
//! Helper to create an object wrapped in a DeepCopyUniquePtr.

src/definition.h

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
#include "types.h"
2222
#include "reflist.h"
23+
#include "construct.h"
2324

2425
#ifdef _MSC_VER
2526
// To disable 'inherits via dominance' warnings with MSVC.
@@ -74,6 +75,8 @@ struct BodyInfo
7475
class Definition
7576
{
7677
public:
78+
ABSTRACT_BASE_CLASS(Definition)
79+
7780
/*! Types of derived classes */
7881
enum DefType
7982
{
@@ -291,9 +294,6 @@ class Definition
291294
virtual void _setSymbolName(const QCString &name) = 0;
292295
virtual QCString _symbolName() const = 0;
293296

294-
// ---------------------------------
295-
virtual ~Definition() = default;
296-
297297
private:
298298
friend class DefinitionImpl;
299299
friend DefinitionMutable* toDefinitionMutable(Definition *);
@@ -305,7 +305,7 @@ class Definition
305305
class DefinitionMutable
306306
{
307307
public:
308-
308+
ABSTRACT_BASE_CLASS(DefinitionMutable)
309309

310310
//-----------------------------------------------------------------------------------
311311
// ---- setters -----
@@ -385,9 +385,6 @@ class DefinitionMutable
385385
virtual void writeDocAnchorsToTagFile(TextStream &) const = 0;
386386
virtual void writeToc(OutputList &ol, const LocalToc &lt) const = 0;
387387

388-
// ---------------------------------
389-
virtual ~DefinitionMutable() = default;
390-
391388
private:
392389
friend Definition* toDefinition(DefinitionMutable *);
393390
virtual Definition *toDefinition_() = 0;

src/definitionimpl.h

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ class DefinitionImpl
3333
const QCString &name,const char *b=nullptr,const char *d=nullptr,
3434
bool isSymbol=TRUE);
3535
~DefinitionImpl();
36+
DefinitionImpl(const DefinitionImpl &d);
37+
DefinitionImpl &operator=(const DefinitionImpl &d);
38+
DefinitionImpl(DefinitionImpl &&d) = delete;
39+
DefinitionImpl &operator=(DefinitionImpl &&d) = delete;
3640

3741
const QCString &name() const;
3842
bool isAnonymous() const;
@@ -124,7 +128,6 @@ class DefinitionImpl
124128
void _setSymbolName(const QCString &name);
125129
QCString _symbolName() const;
126130

127-
DefinitionImpl(const DefinitionImpl &d);
128131

129132
private:
130133

@@ -150,7 +153,11 @@ class DefinitionMixin : public Base
150153
const QCString &defFileName,int defLine,int defColumn,
151154
const QCString &name,const char *b=nullptr,const char *d=nullptr,
152155
bool isSymbol=TRUE) : m_impl(this,defFileName,defLine,defColumn,name,b,d,isSymbol) {}
153-
~DefinitionMixin() = default;
156+
DefinitionMixin(const DefinitionMixin &) = default;
157+
DefinitionMixin &operator=(const DefinitionMixin &) = default;
158+
DefinitionMixin(DefinitionMixin &&) = delete;
159+
DefinitionMixin &operator=(DefinitionMixin &&) = delete;
160+
~DefinitionMixin() = default;
154161

155162
bool isAlias() const override { return FALSE; }
156163

@@ -286,10 +293,6 @@ class DefinitionMixin : public Base
286293
QCString _symbolName() const override
287294
{ return m_impl._symbolName(); }
288295

289-
protected:
290-
291-
DefinitionMixin(const DefinitionMixin &def) = default;
292-
293296
private:
294297
Definition *toDefinition_() override { return this; }
295298
DefinitionMutable *toDefinitionMutable_() override { return this; }
@@ -303,6 +306,8 @@ class DefinitionAliasImpl
303306
public:
304307
DefinitionAliasImpl(Definition *def,const Definition *scope,const Definition *alias);
305308
virtual ~DefinitionAliasImpl();
309+
NON_COPYABLE(DefinitionAliasImpl)
310+
306311
void init();
307312
void deinit();
308313
const QCString &name() const;
@@ -321,11 +326,12 @@ class DefinitionAliasMixin : public Base
321326
public:
322327
DefinitionAliasMixin(const Definition *scope,const Definition *alias)
323328
: m_impl(this,scope,alias), m_scope(scope), m_alias(alias) {}
329+
virtual ~DefinitionAliasMixin() = default;
330+
NON_COPYABLE(DefinitionAliasMixin)
324331

325332
void init() { m_impl.init(); }
326333
void deinit() { m_impl.deinit(); }
327334

328-
virtual ~DefinitionAliasMixin() = default;
329335

330336
bool isAlias() const override { return TRUE; }
331337

0 commit comments

Comments
 (0)