static void Deserialize(IStream& stream, char*& value)
{
value = new char;
+ std::unique_ptr<char> ptr(value);
stream.Read(sizeof(*value), value);
+ ptr.release();
}
// unsigned char
static void Deserialize(IStream& stream, unsigned char*& value)
{
value = new unsigned char;
+ std::unique_ptr<unsigned char> ptr(value);
stream.Read(sizeof(*value), value);
+ ptr.release();
}
// unsigned int
static void Deserialize(IStream& stream, unsigned*& value)
{
value = new unsigned;
+ std::unique_ptr<unsigned> ptr(value);
stream.Read(sizeof(*value), value);
+ ptr.release();
}
// int
static void Deserialize(IStream& stream, int*& value)
{
value = new int;
+ std::unique_ptr<int> ptr(value);
stream.Read(sizeof(*value), value);
+ ptr.release();
}
// bool
static void Deserialize(IStream& stream, bool*& value)
{
value = new bool;
+ std::unique_ptr<bool> ptr(value);
stream.Read(sizeof(*value), value);
+ ptr.release();
}
// time_t
static void Deserialize(IStream& stream, time_t*& value)
{
value = new time_t;
+ std::unique_ptr<time_t> ptr(value);
stream.Read(sizeof(*value), value);
+ ptr.release();
}
// std::string
int length;
stream.Read(sizeof(length), &length);
char * buf = new char[length + 1];
+ std::unique_ptr<char[]> ptr(buf);
stream.Read(length, buf);
buf[length] = 0;
str = std::string(buf);
- delete[] buf;
}
static void Deserialize(IStream& stream, std::string*& str)
{
int length;
stream.Read(sizeof(length), &length);
char * buf = new char[length + 1];
+ std::unique_ptr<char[]> ptr(buf);
stream.Read(length, buf);
buf[length] = 0;
str = new std::string(buf);
- delete[] buf;
}
// STL templates
static void Deserialize(IStream& stream, std::list<T>*& list)
{
list = new std::list<T>;
+ std::unique_ptr<std::list<T>> ptr(list);
Deserialize(stream, *list);
+ ptr.release();
}
// std::vector
static void Deserialize(IStream& stream, std::vector<T>*& vec)
{
vec = new std::vector<T>;
+ std::unique_ptr<std::vector<T>> ptr(vec);
Deserialize(stream, *vec);
+ ptr.release();
}
// std::pair
static void Deserialize(IStream& stream, std::pair<A, B>*& p)
{
p = new std::pair<A, B>;
+ std::unique_ptr<std::pair<A, B>> ptr(p);
Deserialize(stream, *p);
+ ptr.release();
}
// std::tuple
static void Deserialize(IStream& stream, std::tuple<Tp...>*& t)
{
t = new std::tuple<Tp...>;
+ std::unique_ptr<std::tuple<Tp...>> ptr(t);
Deserialize(stream, *t);
+ ptr.release();
}
// std::map
static void Deserialize(IStream& stream, std::map<K, T>*& map)
{
map = new std::map<K, T>;
+ std::unique_ptr<std::map<K, T>> ptr(map);
Deserialize(stream, *map);
+ ptr.release();
}
template<typename T1, typename T2, typename... Tail>