@@ -193,12 +193,16 @@ class Variant {
193
193
};
194
194
195
195
inline Variant::Variant () :
196
- m_Type(None), m_BufferSize(0 ), m_pData(nullptr ) {
196
+ m_Type(None),
197
+ m_BufferSize(0 ),
198
+ m_pData(nullptr ) {
197
199
// empty
198
200
}
199
201
200
202
inline Variant::Variant (Type type, void *pData, size_t numItems) :
201
- m_Type(None), m_BufferSize(0 ), m_pData(nullptr ) {
203
+ m_Type(None),
204
+ m_BufferSize(0 ),
205
+ m_pData(nullptr ) {
202
206
if (isValid (type, numItems)) {
203
207
size_t size = 0 ;
204
208
m_Type = type;
@@ -214,13 +218,17 @@ inline Variant::Variant(Type type, void *pData, size_t numItems) :
214
218
}
215
219
216
220
inline Variant::Variant (bool value) :
217
- m_Type(Boolean), m_BufferSize(0 ), m_pData(nullptr ) {
221
+ m_Type(Boolean),
222
+ m_BufferSize(0 ),
223
+ m_pData(nullptr ) {
218
224
reserve (Boolean, 0 );
219
225
::memcpy (m_pData, &value, m_BufferSize);
220
226
}
221
227
222
228
inline Variant::Variant (const Variant &other) :
223
- m_Type(None), m_BufferSize(0 ), m_pData(NULL ) {
229
+ m_Type(None),
230
+ m_BufferSize(0 ),
231
+ m_pData(nullptr ) {
224
232
m_Type = other.m_Type ;
225
233
if (String == m_Type) {
226
234
setStdString (other.getString ());
@@ -354,9 +362,14 @@ inline float *Variant::getFloat4x4() const {
354
362
inline void Variant::setStdString (const std::string &value) {
355
363
clear ();
356
364
m_Type = String;
357
- m_pData = new char [value.size () + 1 ];
365
+ if (value.empty ()) {
366
+ m_pData = nullptr ;
367
+ m_BufferSize = 0 ;
368
+ }
369
+ m_BufferSize = sizeof (char ) * (value.size () + 1 );
370
+ m_pData = (char *) ::malloc (m_BufferSize);
358
371
::memcpy (m_pData, value.c_str(), sizeof(char ) * value.size());
359
- char *ptr = (char *)m_pData;
372
+ char *ptr = (char *) m_pData;
360
373
ptr[value.size ()] = ' \0 ' ;
361
374
}
362
375
0 commit comments