@@ -293,8 +293,8 @@ class vector
293
293
// / Move-assigns the data from \p other to \c *this.
294
294
vector& operator =(vector&& other)
295
295
{
296
- if (m_size ){
297
- m_allocator.deallocate (m_data, m_size );
296
+ if (capacity () > 0 ){
297
+ m_allocator.deallocate (m_data, capacity () );
298
298
}
299
299
300
300
m_data = std::move (other.m_data );
@@ -310,8 +310,8 @@ class vector
310
310
// / Destroys the vector object.
311
311
~vector ()
312
312
{
313
- if (m_size ){
314
- m_allocator.deallocate (m_data, m_size );
313
+ if (capacity () > 0 ){
314
+ m_allocator.deallocate (m_data, capacity () );
315
315
}
316
316
}
317
317
@@ -401,11 +401,14 @@ class vector
401
401
)
402
402
);
403
403
404
- // copy old values to the new buffer
405
- ::boost::compute::copy (m_data, m_data + m_size, new_data, queue);
404
+ if (capacity () > 0 )
405
+ {
406
+ // copy old values to the new buffer
407
+ ::boost::compute::copy (m_data, m_data + m_size, new_data, queue);
406
408
407
- // free old memory
408
- m_allocator.deallocate (m_data, m_size);
409
+ // free old memory
410
+ m_allocator.deallocate (m_data, capacity ());
411
+ }
409
412
410
413
// set new data and size
411
414
m_data = new_data;
@@ -430,6 +433,10 @@ class vector
430
433
// / Returns the capacity of the vector.
431
434
size_type capacity () const
432
435
{
436
+ if (m_data == pointer ()) // null pointer check
437
+ {
438
+ return 0 ;
439
+ }
433
440
return m_data.get_buffer ().size () / sizeof (T);
434
441
}
435
442
@@ -447,11 +454,14 @@ class vector
447
454
)
448
455
);
449
456
450
- // copy old values to the new buffer
451
- ::boost::compute::copy (m_data, m_data + m_size, new_data, queue);
457
+ if (capacity () > 0 )
458
+ {
459
+ // copy old values to the new buffer
460
+ ::boost::compute::copy (m_data, m_data + m_size, new_data, queue);
452
461
453
- // free old memory
454
- m_allocator.deallocate (m_data, m_size);
462
+ // free old memory
463
+ m_allocator.deallocate (m_data, capacity ());
464
+ }
455
465
456
466
// set new data
457
467
m_data = new_data;
0 commit comments