将堆栈变量存储在成员向量中是否有效使用向量?

时间:2016-03-22 13:40:56

标签: c++11 vector stack heap

实际上,我遇到了一个代码库,并且对有关堆栈和堆的$q有疑问。

在成员函数的某处,我遇到了类似的代码:

会员声明:

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是在堆栈上分配的,并且它的存储空间供以后使用会导致错误。这是对的吗?

1 个答案:

答案 0 :(得分:1)

事实上,当您在push_pack中执行std::vector时,您会复制数据点。因此,您将拥有2个相同的实例,一个在堆中,另一个在向量中。

如果需要,您必须确保Data::Point实现了复制构造函数(例如,如果包含指针)。