Skip to content

Commit 0af04dc

Browse files
committed
Add missing virtual destructors and use rule of 5
For classes derived from virtual base classes.
1 parent 437461f commit 0af04dc

8 files changed

Lines changed: 63 additions & 5 deletions

File tree

examples/osmium_index_lookup.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class IndexAccess {
7070
IndexAccess(IndexAccess&&) = delete;
7171
IndexAccess& operator=(IndexAccess&&) = delete;
7272

73-
virtual ~IndexAccess() = default;
73+
virtual ~IndexAccess() noexcept = default;
7474

7575
virtual void dump() const = 0;
7676

@@ -97,6 +97,14 @@ class IndexAccessDense : public IndexAccess<TValue> {
9797
IndexAccess<TValue>(fd) {
9898
}
9999

100+
IndexAccessDense(const IndexAccessDense&) = default;
101+
IndexAccessDense& operator=(const IndexAccessDense&) = default;
102+
103+
IndexAccessDense(IndexAccessDense&&) = default;
104+
IndexAccessDense& operator=(IndexAccessDense&&) = default;
105+
106+
~IndexAccessDense() noexcept override = default;
107+
100108
void dump() const override {
101109
index_type index{this->fd()};
102110

@@ -136,6 +144,14 @@ class IndexAccessSparse : public IndexAccess<TValue> {
136144
IndexAccess<TValue>(fd) {
137145
}
138146

147+
IndexAccessSparse(const IndexAccessSparse&) = default;
148+
IndexAccessSparse& operator=(const IndexAccessSparse&) = default;
149+
150+
IndexAccessSparse(IndexAccessSparse&&) = default;
151+
IndexAccessSparse& operator=(IndexAccessSparse&&) = default;
152+
153+
~IndexAccessSparse() noexcept override = default;
154+
139155
void dump() const override {
140156
index_type index{this->fd()};
141157

include/osmium/area/problem_reporter.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ namespace osmium {
8080
ProblemReporter(ProblemReporter&&) noexcept = default;
8181
ProblemReporter& operator=(ProblemReporter&&) noexcept = default;
8282

83-
virtual ~ProblemReporter() = default;
83+
virtual ~ProblemReporter() noexcept = default;
8484

8585
/**
8686
* Set the object the next problem reports will be on.

include/osmium/dynamic_handler.hpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ namespace osmium {
6262
HandlerWrapperBase(HandlerWrapperBase&&) noexcept = default;
6363
HandlerWrapperBase& operator=(HandlerWrapperBase&&) noexcept = default;
6464

65-
virtual ~HandlerWrapperBase() = default;
65+
virtual ~HandlerWrapperBase() noexcept = default;
6666

6767
virtual void node(const osmium::Node& /*node*/) {
6868
}
@@ -126,6 +126,14 @@ auto _name_##_dispatch(THandler& handler, const osmium::_type_& object, long) ->
126126
m_handler(std::forward<TArgs>(args)...) {
127127
}
128128

129+
HandlerWrapper(const HandlerWrapper&) = default;
130+
HandlerWrapper& operator=(const HandlerWrapper&) = default;
131+
132+
HandlerWrapper(HandlerWrapper&&) noexcept = default;
133+
HandlerWrapper& operator=(HandlerWrapper&&) noexcept = default;
134+
135+
~HandlerWrapper() noexcept override = default;
136+
129137
void node(const osmium::Node& node) final {
130138
node_dispatch(m_handler, node, 0);
131139
}

include/osmium/index/detail/vector_map.hpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,14 @@ namespace osmium {
6565
m_vector() {
6666
}
6767

68+
VectorBasedDenseMap(const VectorBasedDenseMap&) = default;
69+
VectorBasedDenseMap& operator=(const VectorBasedDenseMap&) = default;
70+
71+
VectorBasedDenseMap(VectorBasedDenseMap&&) noexcept = default;
72+
VectorBasedDenseMap& operator=(VectorBasedDenseMap&&) noexcept = default;
73+
74+
~VectorBasedDenseMap() noexcept override = default;
75+
6876
explicit VectorBasedDenseMap(int fd) :
6977
m_vector(fd) {
7078
}
@@ -180,6 +188,14 @@ namespace osmium {
180188
m_vector(fd) {
181189
}
182190

191+
VectorBasedSparseMap(const VectorBasedSparseMap&) = default;
192+
VectorBasedSparseMap& operator=(const VectorBasedSparseMap&) = default;
193+
194+
VectorBasedSparseMap(VectorBasedSparseMap&&) noexcept = default;
195+
VectorBasedSparseMap& operator=(VectorBasedSparseMap&&) noexcept = default;
196+
197+
~VectorBasedSparseMap() noexcept override = default;
198+
183199
void set(const TId id, const TValue value) final {
184200
m_vector.push_back(element_type(id, value));
185201
}

include/osmium/index/detail/vector_multimap.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,14 @@ namespace osmium {
7575
m_vector(fd) {
7676
}
7777

78+
VectorBasedSparseMultimap(const VectorBasedSparseMultimap&) = default;
79+
VectorBasedSparseMultimap& operator=(const VectorBasedSparseMultimap&) = default;
80+
81+
VectorBasedSparseMultimap(VectorBasedSparseMultimap&&) noexcept = default;
82+
VectorBasedSparseMultimap& operator=(VectorBasedSparseMultimap&&) noexcept = default;
83+
84+
~VectorBasedSparseMultimap() noexcept override = default;
85+
7886
void set(const TId id, const TValue value) final {
7987
m_vector.push_back(element_type(id, value));
8088
}

include/osmium/index/id_set.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ namespace osmium {
6767
IdSet(IdSet&&) noexcept = default;
6868
IdSet& operator=(IdSet&&) noexcept = default;
6969

70-
virtual ~IdSet() = default;
70+
virtual ~IdSet() noexcept = default;
7171

7272
/**
7373
* Add the given Id to the set.
@@ -383,6 +383,8 @@ namespace osmium {
383383

384384
public:
385385

386+
~IdSetSmall() noexcept override = default;
387+
386388
/**
387389
* Add the given Id to the set.
388390
*/

include/osmium/index/map.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ namespace osmium {
219219
MapFactory(MapFactory&&) = delete;
220220
MapFactory& operator=(MapFactory&&) = delete;
221221

222-
~MapFactory() = default;
222+
~MapFactory() noexcept = default;
223223

224224
static MapFactory<id_type, value_type>& instance() {
225225
static MapFactory<id_type, value_type> factory;

include/osmium/index/map/dummy.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@ namespace osmium {
5656

5757
Dummy() = default;
5858

59+
Dummy(const Dummy&) = default;
60+
Dummy& operator=(const Dummy&) = default;
61+
62+
Dummy(Dummy&&) noexcept = default;
63+
Dummy& operator=(Dummy&&) noexcept = default;
64+
65+
~Dummy() noexcept override = default;
66+
5967
void set(const TId /*id*/, const TValue /*value*/) final {
6068
// intentionally left blank
6169
}

0 commit comments

Comments
 (0)