我剛剛在代碼中注意到我在堆棧中聲明瞭一個向量(而不是堆),然後使用我的「set」函數將另一個類的成員變量設置爲此向量。唯一的問題是在退出我的函數(myFunction)之後,矢量應該被銷燬(因爲它在堆棧上)並且對這個矢量的引用應該指向「沒有意義」。但我的代碼工作正常,所以我問自己爲什麼。我真的很幸運,因爲這個向量所在的內存部分是存在的,因爲到現在爲止沒有人刪除它?所以如果我的代碼沒有崩潰,這是一個幸運的問題? 下面是代碼:在堆或堆棧上的C++矢量?
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;
}
}
對於你提到發生的情況,'mDoubleVector'需要是一個引用成員,它不在你的代碼中。而且,如果它是一個引用成員,你不能使用setter函數設置它,需要在構造函數成員初始化列表中初始化它。你擁有的是'double'類型的成員,它有自己的內存。 –