Comportement d'un destructeur
Bonjour tout le monde,
Je suis encore débutant en C++, et j'aurais aimé apprendre plus sur le comportement du destructeur dans la libération de la mémoire, mais d'abord voici le code avec lequel je pratique :
Fenetre.h:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
#ifndef FENETRE_H
#define FENETRE_H
class Fenetre
{
public:
Fenetre();
Fenetre(int width, int height, int x, int y);
/******************************************************/
void launch();
/******************************************************/
virtual ~Fenetre();
protected :
void terminate();
private:
/******************************************************/
SDL_Window* window;
SDL_Renderer* renderer;
SDL_Event event;
bool isRunning;
int F_Width;
int F_Height;
int F_PosX;
int F_PosY;
/******************************************************/
};
#endif // FENETRE_H |
Fenetre.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
#include <SDL2/SDL.h>
#include "Fenetre.h"
#include <iostream>
Fenetre::Fenetre() : F_Width (640),F_Height(480),F_PosX(0),F_PosY(0),isRunning(false)
{
SDL_Init(SDL_INIT_EVERYTHING);
window = SDL_CreateWindow("Test"
,SDL_WINDOWPOS_CENTERED
,SDL_WINDOWPOS_CENTERED
,F_Width
,F_Height
,0);
renderer = SDL_CreateRenderer(window, -1, 0 );
}
Fenetre::Fenetre(int width = 640, int height = 480,int x = 200, int y = 100)
{
F_Width = width;
F_Height = height;
F_PosX = x;
F_PosY = y;
isRunning = false;
SDL_Init(SDL_INIT_EVERYTHING);
window = SDL_CreateWindow("Test"
,F_PosX
,F_PosY
,F_Width
,F_Height
,0);
renderer = SDL_CreateRenderer(window, -1, 0 );
}
void Fenetre::launch()
{
isRunning = true;
while(isRunning){
while (SDL_PollEvent( &event )){
if (event.type == SDL_QUIT){
isRunning = false;
}
/**UPDATE THE CONTENT**/
std::cout << "Updated !" << std::endl;
}
}
terminate();
}
void Fenetre::terminate()
{
std::cout << "Suppression du render et window" << std::endl;
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
}
Fenetre::~Fenetre(){std::cout << "Suppression de l'objet" << std::endl;} |
et pour finir le Main.cpp :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
#include <SDL2/SDL.h>
#include <iostream>
#include "Fenetre.h"
int main(int argc, char* argv[]){
Fenetre * maFenetre = new Fenetre(800,600,10,10);
maFenetre->launch();
delete maFenetre;
return 0;
} |
Remarque : j'utilise Code::Blocks !
Pour mes questions :
-Est-ce que le destructeur fait son rôle ici, même s'il n'y a rien à l'intérieur ?
-Est-ce que je suis une structure correcte dans mon code ?
S'il y a d'autres remarques je serais heureux de les connaitre (bonnes ou mauvaises), Merci !