在保持原始对象的同时移动
Move while keeping the original object
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<double> a = {1.0,2.1,3.3};
vector<double> b = {5.8};
// Do stuff ...
b = move(a);
cout << "a.size() = " << a.size() << "n";
cout << "b.size() = " << b.size() << "n";
return 0;
}
输出
a.size() = 0
b.size() = 3
我了解此输出,但我希望a
仍然指向相同的原始数据。如何将a
移动到b
(以避免丢失时间复制(,同时同时使用a
和b
,就好像一个是另一个是对另一个的参考?我不能使用参考,因为它必须更改其引用的内容。
我可以使用指针
int main()
{
vector<double>* a = new vector<double>;
vector<double>* b = new vector<double>;
a->push_back(1.0);
a->push_back(2.1);
a->push_back(3.3);
b->push_back(5.8);
// Do stuff ...
b = a;
cout << "a->size() = " << a->size() << "n";
cout << "b->size() = " << b->size() << "n";
return 0;
}
输出
a->size() = 3
b->size() = 3
但是,在我的一个很大的代码中,我使用的是a
和b
并不是指示器,我介意仅用于此举才能更改整个代码。有解决方案吗?
您误解了向量如何管理其内存。
无论您是使用简单的分配还是移动,您将永远不会得到两个不同的向量指向内存中相同的数据。在分配案例中,删除了目标中的任何数据,然后将源中数据的副本添加到目标中。在移动情况下,删除了目标中的任何数据,然后将源中的数据从源中删除并添加到目标。
回答您的问题:"如何将A移动到B(避免浪费时间复制(,同时同时使用A和B,就好像一个是对另一个的参考?" - 您不应该完全将A移至B(因此不花时间复制数据(,然后定义B作为对A或A指针的引用:
:vector<double> a = {1.0,2.1,3.3};
vector<double>& b_ref = a;
vector<double>* b_ptr = &a;
b_ref和b_ptr均允许访问A中的数据,而无需制作任何副本。
相关文章:
- 当 std::move 与 C 样式数组或不移动对象时会发生什么
- 如果这不是类的"复制构造函数",是否可以移动对象?
- 我可以从向量的开头移动对象吗?为什么不呢
- 为什么可以使用已删除的移动构造函数和赋值运算符移动对象?
- 使用参数将仅可移动对象捕获到 lambda
- 初始化不可移动对象数组:为什么这样的代码无法在 GCC 上编译?
- c++ 从成员函数创建新线程并移动对象和整个对象
- 返回unique_ptr或只是移动对象
- 将 OpenGL 实例化图形与移动对象一起使用
- 如何在给定两个点的线上移动对象?
- 使用文件描述符移动对象
- 为什么移动对象不会使其为空?
- 被引用的移动对象
- Maya c++ API,移动对象?
- 为什么传递std ::移动(对象)和此对象的成员函数会导致sigsegv
- 命令模式:如何进行连续操作?(例如,移动对象)
- 返回具有显式构造函数的不可复制的不可移动对象
- 如何在 C++ 中的特定边界内移动对象
- 在阵列中向上移动对象
- DirectX 11 基于旋转移动对象