2016-03-22 32 views
-1

其實,我面臨一個代碼庫,並且有關於堆棧和堆的std::vector的問題。是否在一個成員向量中存儲一個堆棧變量有效使用向量?

某處在一個成員函數我遇到類似這樣的代碼:

會員聲明:

//member variable in DataHelper class 
std::vector<Data::Point> mDataPoints; 

成員函數:

void DataHelper::LoadData(int nPoints) 
{ 
    //mDataPoints is a member variable 
    mDataPoints.reserve(nPoints); 

    for (UINT i = 0; i < nPoints; i++) 
    { 
     Data::Point point; //some data class 
     point.X = 1; //dummy values 
     point.Y = 2; 
     point.Z = 3; 

     mDataPoints.push_back(point); 
    } 
} 

所以Data::Points存儲在矢量以後使用。

我認爲Data::Point point;被分配在堆棧上,並且從這個意義上說它的存儲在以後使用會導致錯誤。這是正確的嗎?

回答

1

事實上,當您在std::vector中執行push_pack時,您將複製數據點。所以,你將有兩個相同的實例,一個在堆中,另一個在向量中。

您必須確保您的Data::Point在需要時實現複製構造函數(例如,如果包含指針)。

+0

啊我看到了,並感謝複製構造函數/指針上的頭! – Stefan

相關問題