Différentes façons d'initialiser les champs, différents effets ?
Bonjour,
Je suis débutant en C++ et je rentre dans le vif du sujet en bossant sur un projet en partie en C++. J'ai un programme qui plante, j'ai dû mal à comprendre pourquoi. Voici un code simplifié qui me ressemble reproduire le use case :
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
| #include <iostream>
class Process {
public:
void printSomething(void) {
std::cout << "Process is printing something";
}
};
class Test
{
public:
Process *process;
Test() : process() {
}
virtual ~Test() {
delete process;
}
int run(void) {
process->printSomething();
return 0;
}
};
int main(void)
{
Test test;
return test.run();
} |
Lors de l'exécution de test.run(), le programme crashe. Je n'ai pas de possibilité simple de déboguer le programme mais en bricolant un peu, j'ai "résolu" le problème en modifiant la façon d'initialiser le champ [c]process[/] de la classe Test :
Code:
1 2 3
| Test() {
process = new Process();
} |
Il me semblait que les 2 façons étaient équivalentes... Donc soit elles ne le sont pas, et je vais vous demander pourquoi ? Soit elles sont équivalentes et le programme tombe en marche...
Merci pour vos lumières ! :ccool:
PS : question annexe --> mon destructeur est correct ?