C ++通过引用相当于PHP分配?

时间:2013-05-24 20:22:43

标签: c++ reference

我正在分析一个旧的遗留C ++应用程序。

我看到有很多vector<class> var声明:

vector<someClass> myVec1;
vector<someClass> myVec2;
vector<someClass> myVec3;

这个载体可以长得很多。在代码中我还发现有时它已经完成了:

myVec2 = myVec1;

此分配操作实际上会复制数据,如果矢量很大,则操作很慢。

有没有办法只分配myVec2 myVec1的引用而不必重构所有依赖这些变量的代码(即动态分配它们)?

请注意,在不再使用作业myVec1之后。

4 个答案:

答案 0 :(得分:7)

您可以尝试myVec2.swap(myVec1);,这应该非常快。由于您不再关心myVec1,因此它现在包含myVec2的原始内容并不重要。

答案 1 :(得分:5)

您可以声明一个这样的引用变量:

vector<someClass> myVec1;
vector<someClass>& myVec2 = myVec1;

但是,如果myVec1超出范围myVec2则会很糟糕。 此外,如果您使用的是c ++ 11编译器,您的矢量可以“移动”而不是复制。

很难说在不知道用例的情况下需要做什么。

答案 2 :(得分:3)

如果您不需要重新分配矢量变量,可以使用C ++引用,如下所示:

vector<someClass> myVec1;
vector<someClass>& myVec2 =  myVec1;

(这就像分配指向myVec2的常量指针但保留“by-value”变量的语义一样)

更多关于C ++中的引用和可能的陷阱here

答案 3 :(得分:0)

你为什么要这样?如果您想引用myVect1,请使用名称myVect1引用它。

复制矢量非常有用:它可以用作快照或从有用状态中的另一个初始化另一个。

无论如何,复制几兆字节的数据并不是那么慢。最糟糕的是毫秒。