我尝试打开Call C++ Default Ctors/Dtors in Objective-C
标记,但是当我第一次尝试访问我的地图时,我仍然收到EXC_BAD_ACCESS
错误:
(*[TextureBatcher getSharedTextureBatcher].getMap)[texID].vertexCount=0;
(*[TextureBatcher getSharedTextureBatcher].getMap)[texID].indexCount=0;
getMap只返回对我的地图的引用:
-(VertexMap *) getMap{
return &texMap;
}
VertexMap是std :: map的typedef:
typedef std::map<GLuint, VertexInfo> VertexMap;
不知道为什么这会在设备上失败,而不是在模拟器中,有什么想法?
答案 0 :(得分:1)
我们很清楚:
(*[TextureBatcher getSharedTextureBatcher].getMap)[texID].vertexCount=0;
如果Map [texID]不存在,则上面的行将导致构造VertexInfo对象(使用默认构造函数VertexInfo())。这是你想要的吗?
也许底层的std :: map在设备上的实现方式不同,阻止了这种初始化?
您确定在设备目标上设置在Objective-C中调用C ++默认Ctors / Dtors 标志,而不仅仅是模拟器目标吗?
通常,模式是在这里使用指针(C ++),所以你最终得到:
typedef std::map<GLunit, VertexInfo*> VertexMap;
VertexMap theMap;
theMap[0] = new VertexInfo(...);
// now operate on theMap[0] normally
或者我误解了这个问题?