Skip to content

Commit ad18aa9

Browse files
Use shared_ptr for traits
1 parent ca0b983 commit ad18aa9

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

src/util/serializer.h

+9-6
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Purpose: Generic serialization of object hierarchies.
1212
#define CPROVER_UTIL_SERIALIZER_H
1313

1414
#include <utility>
15+
#include <memory>
1516
#include <string>
1617
#include <functional>
1718
#include <vector>
@@ -67,7 +68,7 @@ class serializert
6768
// Whether this serializer is used for reading rather than writing
6869
bool is_read;
6970
// Traits attached to this serializer
70-
serializer_traitst *traits;
71+
std::shared_ptr<serializer_traitst> traits;
7172

7273
/////////////////////////////////////////////////////////////////////////////
7374
// Section: Constructors/destructors
@@ -89,7 +90,7 @@ class serializert
8990
9091
\*******************************************************************/
9192
serializert(serializert *parent, bool is_read)
92-
: parent(parent), is_read(is_read), traits(nullptr)
93+
: parent(parent), is_read(is_read)
9394
{
9495
}
9596

@@ -109,7 +110,7 @@ class serializert
109110
110111
\*******************************************************************/
111112
explicit serializert(bool is_read)
112-
: parent(nullptr), is_read(is_read), traits(nullptr)
113+
: parent(nullptr), is_read(is_read)
113114
{
114115
}
115116

@@ -161,7 +162,7 @@ class serializert
161162
template<typename traitst>
162163
traitst &get_traits() const
163164
{
164-
traitst * result=dynamic_cast<traitst *>(traits);
165+
traitst * result=dynamic_cast<traitst *>(traits.get());
165166
if(result!=nullptr)
166167
return *result;
167168
assert(parent!=nullptr); // In release build allow undefined behaviour
@@ -186,10 +187,12 @@ class serializert
186187
Sets traits attached to this serializer.
187188
188189
\*******************************************************************/
189-
void set_traits(serializer_traitst &serializer_traits)
190+
void set_traits(std::shared_ptr<serializer_traitst> serializer_traits)
190191
{
192+
assert(serializer_traits!=nullptr);
193+
// If you need to set_traits twice then make the traits member a set
191194
assert(traits==nullptr);
192-
traits=&serializer_traits;
195+
traits=serializer_traits;
193196
}
194197

195198
/////////////////////////////////////////////////////////////////////////////

0 commit comments

Comments
 (0)