dimanche 26 mars 2017

Create own implementation of vector which has moving operations and push_back for rvalue

The task is to implement vector with move operations and push_back for rvalue

template<typename T>
class Vector
{
private:
    size_t size;
    size_t capacity;
    T* buffer;
public:
    Vector(size_t s) {
        size = 0;
        capacity = s;       
        buffer = new T[capacity];
    }
    //Move constructor
    Vector(Vector&& rhs): size(rhs.size),
                          capacity(rhs.capacity),
                          buffer(tmp.buffer)
    {
        rhs.buffer = nullptr;
    }
    T& operator=(Vector&& tmp) {
        size = tmp.size;
        capacity = tmp.capacity;
        buffer = std::move(tmp.buffer);
        return *this;
    }
    void push_back(const T& v) {
        if (size >= capacity)
            reserve(capacity + 5);
        buffer[size++] = v;
    }
    void push_back(T&& v) {
        if (size >= capacity)
            reserve(capacity + 5);
        buffer[size++] = v;
    }

Have I implemented all move operations in my class Vector? Is it correct implementation of method push_back for rvalue ?

Aucun commentaire:

Enregistrer un commentaire