[英]vector of objects to use with a vector of pointers
gSoap生成的代理对象指示我应该使用指针向量:
class SOAP_CMAC ota__RoomStayTypeRoomRates
{
public:
std::vector<class ota__RoomRateType * >RoomRate;
//....
};
而不是使用:
vector.push_back(new Object());
然后必须删除对象,我想我可以创建一个对象向量,然后使用这些对象的地址,因为当向量超出范围时它们将被销毁,从而避免了内存泄漏:
OTARoomRates roomRates;
std::vector<ota__RoomRateType> rateObjectList;
rateObjectList.reserve(7);
for (int i = 0; i < 7; i++)
{
rateObjectList[i].RoomTypeCode = &roomTypeCode;
rateObjectList[i].RatePlanID = &ratePlanID;
//...
roomRates.RoomRate.push_back(&rateObjectList[i]);
}
我遇到了段错误。 我想这是个坏主意。 你能解释为什么吗?
rateObjectList.reserve(7)
实际上并未分配或构造任何ota__RoomRateType
对象; 它只要求向量扩展其容量足以容纳7个对象。
潜在地,您需要rateObjectList.resize(7)
。 或std::vector<ota__RoomRateType> rateObjectList(7);
如果您在创建向量时知道该数字。
你能解释为什么吗?
当然。 如果在rateObjectList
销毁时有人持有roomRates
,则任何使用roomRates
的指针的roomRates
都可能导致SEG_FAULT
。 无论如何,这是一个坏主意。
在这种情况下这更好
vector.push_back(new Object());
更好的方法是使用智能指针,例如boost::shared_ptr
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.