我的程序中有一个特定的类,我用来绘制各种形状并将事件添加到形状中。
vector<XQuad*> _inputMappedShape;
void addRegularShape(Container inputPoints, Container outputPoints){
XQuad quad;
setInputPoints(quad, somePoints);
setInputPoints(quad, somePoints);
setArrowHandles(quad, somePoints);
_inputMappedShape[currentIndex++] = &quad;
}
XQuad* getMappedShape(int index){
return _inputMappedShape[index];
}
void setInputPoints(XQuad& quad, Point* somePoints);
void setOutputPoints(XQuad& quad, Point* somePoint);
void setArrowHandles(XQuad& quad, Point* somePoint);
请注意,在上面的代码中(在 method 中addRegularshape
),我在将quad
其他方法添加到vector
集合之前通过引用传递它。
在我的主程序中,我试图使用getMappedShape
为我的目的返回指向四边形的指针的方法来检索形状。
XQuad* returnedShape = getMappedShape(0)
我检查了方法中quad
分配的内存地址addRegularShape
和指针(从方法getMappedShape
)返回的地址,并且内存地址是相同的。
但是,不知何故,当我XQuad
从 类中返回时,我的类中的数据getMappedShape
是不正确的(即不是在其他三个成员函数中的 XQuad 引用对象中修改的数据),而是有一些垃圾值。我找不到发生这种情况的原因,并且怀疑内存已损坏或其他原因,我将addRegularShape
指向指针中的引用对象更改如下。
XQuad* quad = new XQuad();
在此之后,程序开始返回正确的值,但我仍然有点怀疑它为什么会发生?添加 XQuad 对象不是将地址添加到集合的正确方法吗?或者这里是否存在一些范围问题,即当方法超出范围时,对象被销毁并且我从集合中实际返回的内容现在变成了垃圾值?