Bonjour à tous,
Dans mon programme en C++ j'utilise une librairie C nommée General Polygon Clipper qui définit la structure gpc_polygon comme suit :
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
typedef struct                      /* Polygon vertex structure          */
{
  double              x;            /* Vertex x component                */
  double              y;            /* vertex y component                */
} gpc_vertex;
 
typedef struct                      /* Vertex list structure             */
{
  int                 num_vertices; /* Number of vertices in list        */
  gpc_vertex         *vertex;       /* Vertex array pointer              */
} gpc_vertex_list;
 
typedef struct                      /* Polygon set structure             */
{
  int                 num_contours; /* Number of contours in polygon     */
  int                *hole;         /* Hole / external contour flags     */
  gpc_vertex_list    *contour;      /* Contour array pointer             */
 } gpc_polygon;

Je dispose également d'une fonction permettant de libérer la mémoire relative à un gpc_polygon :
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
void gpc_free_polygon(gpc_polygon *p)
	{
	int c;
 
	for (c= 0; c < p->num_contours; c++)
		FREE(p->contour[c].vertex);
	FREE(p->hole);
	FREE(p->contour);
	p->num_contours= 0;
	}

J'utilise dans mon code des std::vector de gpc_polygon, et même des structures C++ ayant comme champ un gpc_polygon voire un std::vector de gpc_polygon ...
Exemples :
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
struct PolygoneDalleAvecInfos
	{
              ...
	gpc_polygon polygone_gpc; 
	};
 
 
struct Niveau
	{
	...
	vector<gpc_polygon> polygonesMursInternesEtageInferieurGPC;
	};
ensuite j'ai des map du style :
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
map<double,vector<PolygoneDalleAvecInfos>> mMap;
bref c'est compliqué.

J'ai des fuites de mémoire en pagaille... j'ai compris que c'était dû aux constructeurs par recopie qui ne copiaient que les pointeurs, ainsi qu'à la non-libération de mémoire lorsque ces structures sont détruites... faut-il et peut-on redéfinir l'opération = pour ma structure C ? et pour la libération de mémoire ?