1

我刚刚在我的代码中注意到我在堆栈(而不是堆)上声明了一个向量,然后使用我的“set”函数将另一个类的成员变量设置为这个向量。唯一的问题是,在退出我的函数 (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;
   }
}
4

2 回答 2

3

没有对 的引用vector,该类有它的副本

于 2012-09-25T09:52:52.640 回答
3

由于 Luchian 比我快,我将对这段代码进行明智的改进:

void SetDoubleVector(std::vector<std::vector<double>> aDoubleVector) {
     mDoubleVector = std::move(aDoubleVector);
   }

引用“经验法则” -如果您需要复制,请在界面中进行。

//编辑以使答案完整。

您的代码确实通过使用它的in复制了向量。operator=SetDoubleVector

于 2012-09-25T09:57:42.677 回答