2016-03-22 18 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

相关问题