@@ -12,6 +12,7 @@ Purpose: Generic serialization of object hierarchies.
12
12
#define CPROVER_UTIL_SERIALIZER_H
13
13
14
14
#include < utility>
15
+ #include < memory>
15
16
#include < string>
16
17
#include < functional>
17
18
#include < vector>
@@ -67,7 +68,7 @@ class serializert
67
68
// Whether this serializer is used for reading rather than writing
68
69
bool is_read;
69
70
// Traits attached to this serializer
70
- serializer_traitst * traits;
71
+ std::shared_ptr< serializer_traitst> traits;
71
72
72
73
// ///////////////////////////////////////////////////////////////////////////
73
74
// Section: Constructors/destructors
@@ -89,7 +90,7 @@ class serializert
89
90
90
91
\*******************************************************************/
91
92
serializert (serializert *parent, bool is_read)
92
- : parent(parent), is_read(is_read), traits( nullptr )
93
+ : parent(parent), is_read(is_read)
93
94
{
94
95
}
95
96
@@ -109,7 +110,7 @@ class serializert
109
110
110
111
\*******************************************************************/
111
112
explicit serializert (bool is_read)
112
- : parent(nullptr ), is_read(is_read), traits( nullptr )
113
+ : parent(nullptr ), is_read(is_read)
113
114
{
114
115
}
115
116
@@ -161,7 +162,7 @@ class serializert
161
162
template <typename traitst>
162
163
traitst &get_traits () const
163
164
{
164
- traitst * result=dynamic_cast <traitst *>(traits);
165
+ traitst * result=dynamic_cast <traitst *>(traits. get () );
165
166
if (result!=nullptr )
166
167
return *result;
167
168
assert (parent!=nullptr ); // In release build allow undefined behaviour
@@ -186,10 +187,12 @@ class serializert
186
187
Sets traits attached to this serializer.
187
188
188
189
\*******************************************************************/
189
- void set_traits (serializer_traitst & serializer_traits)
190
+ void set_traits (std::shared_ptr< serializer_traitst> serializer_traits)
190
191
{
192
+ assert (serializer_traits!=nullptr );
193
+ // If you need to set_traits twice then make the traits member a set
191
194
assert (traits==nullptr );
192
- traits=& serializer_traits;
195
+ traits=serializer_traits;
193
196
}
194
197
195
198
// ///////////////////////////////////////////////////////////////////////////
0 commit comments