我刚刚在我的代码中注意到我在堆栈(而不是堆)上声明了一个向量,然后使用我的“set”-function将另一个类的成员变量设置为此向量。唯一的问题是在退出我的函数(myFunction)之后,应该销毁该向量(因为它在堆栈上)并且对该向量的引用应该指向“没有意义”。但我的代码工作正常,所以我问自己为什么。我是幸运的,因为向量所在的内存部分是存在的,因为直到现在还没有人删除它?如果我的代码没有崩溃,那么运气好吗? 这是代码:
void myFunction() {
std::vector<std::vector<double>> vDoubleVector = MyUtils::CreateDoubleVector(); //Creates a
double vector (but not on heap)
MyClass mC;
mC.SetDoubleVector(vDoubleVector);
}
class MyClass {
std::vector<std::vector<double>> mDoubleVector;
void SetDoubleVector(std::vector<std::vector<double>>& aDoubleVector) {
mDoubleVector = aDoubleVector;
}
}
答案 0 :(得分:3)
没有vector
的引用,该类有副本。
答案 1 :(得分:3)
由于Luchian比我快,我将为这段代码增加明智的改进:
void SetDoubleVector(std::vector<std::vector<double>> aDoubleVector) {
mDoubleVector = std::move(aDoubleVector);
}
引用“经验法则” - 如果您需要复制,请在界面中进行复制。
//编辑以完成答案。
您的代码使用operator=
中的SetDoubleVector
复制向量。