Witajcie,
zauwazylem, ze przy wykonywaniu tego kodu:
CMantaRay3DSObject obj;
for(int i=0; i<pDoc->obj_v.size(); i++)
{
obj = pDoc->obj_v[i];
obj.draw();
}
aplikacja "puchnie" i nie bardzo wiem, gdzie lezy przyczyna. Domyslac sie jedynie moge, ze chodzi o przeciazony operator=
pDoc->obj_v jest wektorem obiektow CMantaRay3DSObject.
Klasa CMantaRay3DSObject wyglada mniej wiecej tak:
// mantaray3dsobject.h
class CMantaRay3DSObject
{
...
CMantaRay3DSObject();
~CMantaRay3DSObject();
CMantaRay3DSObject(const CMantaRay3DSObject&);
vertex_type *vertex;
polygon_type *polygon;
mapcoord_type *mapcoord;
void draw();
CMantaRay3DSObject& operator=(const CMantaRay3DSObject& obj)
{
if(&obj != this)
{
...
vertex = new vertex_type[size_vertices];
polygon = new polygon_type[size_polygons];
mapcoord = new mapcoord_type[size_mapcoord];
memcpy(vertex, obj.vertex, size_vertices*sizeof(vertex_type));
memcpy(polygon, obj.polygon, size_polygons*sizeof(polygon_type));
memcpy(mapcoord, obj.mapcoord, size_mapcoord*sizeof(mapcoord_type));
}
return *this;
}
};
// ======================
// mantaray3dsobject.cpp
CMantaRay3DSObject::CMantaRay3DSObject() : increase(5)
{
...
vertex = new vertex_type[size_vertices];
polygon = new polygon_type[size_polygons];
mapcoord = new mapcoord_type[size_mapcoord];
}
CMantaRay3DSObject::CMantaRay3DSObject(const CMantaRay3DSObject& obj) : increase(obj.increase)
{
...
vertex = new vertex_type[size_vertices];
polygon = new polygon_type[size_polygons];
mapcoord = new mapcoord_type[size_mapcoord];
memcpy(vertex, obj.vertex, size_vertices*sizeof(vertex_type));
memcpy(polygon, obj.polygon, size_polygons*sizeof(polygon_type));
memcpy(mapcoord, obj.mapcoord, size_mapcoord*sizeof(mapcoord_type));
}
CMantaRay3DSObject::~CMantaRay3DSObject()
{
delete []vertex;
delete []mapcoord;
delete []polygon;
}
Bede wdzieczny za wszystkie krytyczne ale rowniez konstruktywne uwagi :)
pozdrawiam
Jacek