实际上,我遇到了一个代码库,并且对有关堆栈和堆的$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
是在堆栈上分配的,并且它的存储空间供以后使用会导致错误。这是对的吗?
答案 0 :(得分:1)
事实上,当您在push_pack
中执行std::vector
时,您会复制数据点。因此,您将拥有2个相同的实例,一个在堆中,另一个在向量中。
如果需要,您必须确保Data::Point
实现了复制构造函数(例如,如果包含指针)。