je ne pige pas un truc dans ton code de la classe Game.
tu crees des instances Piece mais je ne vois nulle part où tu les detruis à part dans le destructeur qui ne detruit que les dernieres instances.
as tu un tableau qui stocke les references de toutes ces instances?
si tu les supprimes pas, va yavoir des fuites de memoire. Pour tester, utilise ce code en mode debug seulement
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #ifdef _DEBUG
#include <crtdbg.h>
#endif
_CrtMemState memStateInit;
_CrtMemCheckpoint(&memStateInit);
Game* pGame = new Game;
pGame->play();
delete pGame;
pGame = NULL;
_CrtMemState memState, memStateDiff;
_CrtMemCheckpoint(&memState);
if ( _CrtMemDifference(&memStateDiff, &memStateInit, &memState) )
=> pas bon |
---
pour board, ca veut dire que le tableau entier sera copié, soit 20*10=>200 int à copier
effectivement Limuath a raison, tu peux rajouter le mot clé const
moi j'ai une preference pour les pointeurs
void Draw(const Piece* pPiece)
---
voici d'autres remarques mais là c'est different, chacun fait comme il veut. donc prends ce que tu veux...
j'utilise des defines pour les constants globales de type int, float, double et string.
1 2 3 4
| #define BOARD_HEIGHT 20
#define BOARD_DOUBLE 20.0
#define BOARD_FLOAT 20.0f
#define BOARD_STRING "hello" |
Pour les noms des classes, j'utilise une lettre en majuscule avant, ca permet de savoir si c'est une classe: CPiece par exemple
Pour le noms des fonctions/methodes j'utilise une majuscule pour ne pas confondre avec les variables locales: void Draw(CPiece* pPiece) par exemple
Pour les pointeurs, le lettre p.
J'ai mets generalement toujours le mot clé virtual aux destructeurs meme si ca prend 4 octets de plus sur un systeme 32bits... ca evite de s'arracher les cheveux lorsqu'on rajoute une classe derivée par la suite... pour les classes qui ne stockent que des donnees, pas besoin, mais dans ce cas j'aurais plutot une preference pour les structures (question d'habitude)
et je n'utilise pas les smart pointeurs
Partager