如何在我自己的类 Vector 中使用 Move 构造函数而不是 Move 赋值运算符
How can I use Move constructor instead of Move assignment operator in my own class Vector?
我有自己的类 Vector,它实现了 Move 构造函数、Move 赋值运算符和右值的方法push_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;
}
在方法push_back(T&v(中,生产线
buffer[size++] = std::move(v);
使用移动分配运算符。如何更改代码以使其使用 Move 构造函数?
使用放置新:
new (&buffer[size++]) T (std::move(v));
下面是一个完整的示例:http://cpp.sh/6s4i3
我在移动球,但如果有什么对你有用的东西
#pragma once
class movement
{
private:
Ball *b;
int size;
public:
movement(void)
{
size=0;
}
Ball getBall(int i)
{
return b[i];
}
void insertBall(Ball n)
{
Ball *temp=new Ball[size+1];
for (int i = 0;i<size; i++)
{
temp[i]=b[i];
}
temp[size]=n;
delete []b;
b=temp;
size++;
}
void update(Ball food,Ball b)
{
for (int i = 0; i < size; i++)
{
//if ((b->getPoint().getX() == b->getPoint().getY())
if (food.getPoint().getX == b.getPoint().getX() && food.getPoint().getY == b.getPoint().getY())
{
insertBall(b);
}
}
}
};
相关文章:
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 添加自定义析构函数时,Move 构造函数在派生类中消失
- std::映射,只有move构造函数可用
- 为什么我的代码中没有调用move构造函数
- std::转换move构造函数的模板专业化的变体
- 如何调用move构造函数
- 我可以将 std::move 与不提供 move 构造函数的类一起使用吗?
- 为什么noexcept move构造函数在向量重新分配期间没有被调用
- 为什么在声明析构函数时必须声明 copy & move 构造函数?
- 如何在我自己的类 Vector 中使用 Move 构造函数而不是 Move 赋值运算符
- GoogleTest Move 构造函数覆盖率
- C - 构造函数,复制构造函数,MOVE构造函数,驱动器
- 如何在基类中调用 "move" '&&' 构造函数?在C++
- 如果我有一个向量(或类似的东西)成员变量,那么move构造函数看起来怎么样
- std::vector的move构造函数是否调用项的move构造器
- 为什么我们需要在move构造函数中将右值引用设置为null
- move构造函数在C++中调用了两次吗
- 实现move构造函数如何影响返回值优化
- 不能默认使用Move构造函数
- C++合成的move构造函数如何受到volatile和虚拟成员的影响