Add copy support

This commit is contained in:
Baptiste Wicht 2014-02-23 17:07:53 +01:00
parent a3bb9c5a41
commit 235767988d

View File

@ -34,9 +34,33 @@ public:
vector() : data(nullptr), _size(0), _capacity(0) {} vector() : data(nullptr), _size(0), _capacity(0) {}
explicit vector(uint64_t c) : data(new T[c]), _size(0), _capacity(c) {} explicit vector(uint64_t c) : data(new T[c]), _size(0), _capacity(c) {}
// Disable copy for now vector(const vector& rhs) : data(nullptr), _size(rhs._size), _capacity(rhs._capacity) {
vector(const vector& rhs) = delete; if(!rhs.empty()){
vector& operator=(const vector& rhs) = delete; data = new T[_capacity];
for(size_t i = 0; i < _size; ++i){
data[i] = rhs.data[i];
}
}
}
vector& operator=(const vector& rhs){
if(data && _capacity < rhs._capacity){
delete[] data;
data = nullptr;
}
_size = rhs._size;
_capacity = rhs._capacity;
if(!rhs.empty()){
data = new T[_capacity];
for(size_t i = 0; i < _size; ++i){
data[i] = rhs.data[i];
}
}
}
//Move constructors //Move constructors
@ -47,6 +71,10 @@ public:
}; };
vector& operator=(vector&& rhs){ vector& operator=(vector&& rhs){
if(data){
delete[] data;
}
data = rhs.data; data = rhs.data;
_size = rhs._size; _size = rhs._size;
_capacity = rhs._capacity; _capacity = rhs._capacity;