繁体   English   中英

堆或堆栈上的C ++向量?

[英]C++ vector on heap or stack?

我只是在代码中注意到,我在堆栈上声明了一个向量(而不是堆),然后使用“ 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;
   }
}

没有对vector引用,该类具有其副本

由于Luchian比我快,因此我将对代码进行合理的改进:

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

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

//编辑以使答案完整。

您的代码确实使用SetDoubleVector中的operator= 复制了向量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM