1
Iは自分のクラスのVectorに代入演算子を移動する代わりに、どのようにMoveコンストラクタを使用できますか?
buffer[size++] = std::move(v);
用途は、代入演算子を移動し、コンストラクタを移動する方法の一backで右辺値
template<typename T>
class Vector
{
private:
T* buffer;
size_t size;
size_t capacity;
public:
Vector(size_t s) {
size = 0;
capacity = s;
buffer = new T[capacity];
}
//Move constructor
Vector(Vector&& tmp): buffer(tmp.buffer),
size(tmp.size),
capacity(tmp.capacity)
{
tmp.buffer = nullptr;
}
//Move assignment operator
Vector& operator=(Vector&& tmp) {
size = tmp.size;
capacity = tmp.capacity;
buffer = std::move(tmp.buffer);
tmp.buffer = nullptr;
return *this;
}
void push_back(const Vector<T>& v) {
if (size >= capacity)
reserve(capacity + 5);
buffer[size++] = v;
}
//push_back for rvalue
void push_back(T&& v) {
if (size >= capacity)
reserve(capacity + 5);
buffer[size++] = std::move(v);
}
~Vector() {
delete[] buffer;
}
ため代入演算子とメソッド一backを移動実装自分のクラスのベクター(T & & V)線を有します。 Moveコンストラクタを使用するようにコードを変更するにはどうすればよいですか?
感謝のために便利な、しかし、私がある場合エラーがあります:4つのオーバーロード関数のいずれも引数を変換できません – user456
どのコンパイラを使用しているかわかりません。ここでは動作例です:http://cpp.sh/8m4by –
私はVisual Studio 2015を今すぐ使用しています – user456