[英]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.