【发布时间】:2018-07-30 02:35:26
【问题描述】:
#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 不是指针,我介意只为这个动作更改整个代码。有解决办法吗?
【问题讨论】:
-
使用引用还是指针?
-
如果您搬进新公寓,是否意味着您的所有物品都可以在新旧公寓中使用?
-
所以您想在没有实际参考的情况下获得参考?这是 XY 问题吗?
-
std::ref会做你想做的事,但你真正需要的实际用例会有所帮助。 -
@Remi.b 可能是最好的。我不确定为什么它被否决,但这可能是因为人们认为您没有研究实际移动某物时发生的情况。
标签: c++ memory copy move move-semantics