Pour une raison quelconque, les éléments suivants ne se plantent pas comme le fait mon programme, mais je suis à peu près sûr que leur conception est similaire. Pour un, la sortie n'est pas correcte. Il sort quelque chose de similaire à:Instanciation d'objets et de membres d'objets
0x537ff4 5471612
Alors que le programme principal sort (nil) pour l'adresse du pointeur.
La clé du problème peut être display_ in Drv.
Voici le code:
#include <iostream>
#include "debug.h"
class LCDText {
public:
int rows_;
LCDText() { rows_ = 10; };
};
class Generic {
LCDText *lcdText_;
public:
Generic(LCDText *lcdText) { lcdText_ = lcdText; };
void Setup() {
Error("%p %d", lcdText_, lcdText_->rows_);
}
};
class Display : public LCDText {
Generic *visitor_;
public:
Display(Generic *visitor) { visitor_ = visitor; };
};
class Drv : public Generic {
Display *display_;
public:
Drv() : Generic((LCDText *)display_) {
display_ = new Display((Generic *)this);
};
~Drv() { delete display_; };
};
int main()
{
Drv drv;
drv.Setup();
return 0;
}