Bonjour,
J'ai besoin d'aide sur le polymorphisme et la copie d'objet
Pour résumer j'ai dans le header de ma librairie
Code : 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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 //Abstract (Generic class) class Alarm { public: Alarm(int type); virtual ~Alarm(); virtual bool Process(Image *im)=0; private: int type; } Alarm *createAlarmLine(int x0, int y0, int x1, int y1); Alarm *createAlarmZone(Image *mask); class AlarmManager { public: AlarmManager(); virtual ~AlarmManager(); bool Process(Image *im); void Add(Alarm* pAlarm); Alarm* Get(int index) const; void Delete(int index); int Size() const; void LoadFromXML(TiXmlNode *cnode); void WriteToXML(TiXmlNode *cnode) const; private: vector<Alarm *> vecAlarm; };
et dans ma librarie j'ai qqc du genre:
J'utilise donc le polymorphisme pour stocker mes objets Alarm dans AlarmManager
Code : 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
19
20
21
22 class AlarmLine { public: AlarmLine(int type); virtual ~AlarmLine(); virtual bool Process(Image *im); private: CvPoint P,Q; } class AlarmZone { public: AlarmZone(int type); virtual ~AlarmZone(); virtual bool Process(Image *im); private: Image *mask; }
Ces derniers sont crées autre part dans mon code grâce aux fonctions createAlarmLine() et createAlarmZone().
Le problème est que l'utilisateur ne doit pas deleter les pointeur crées par les fonctions createAlarm... tant qu'il sont utiliser par le manager.
Mais a la fin du programme il faut que je delete ces pointeurs, si AlarmManager s'occupe de ça cela peut aussi être dangereux.
J'ai pensé que la meilleur solution est de copier les pointeurs mais comme il y a le polymorphisme je ne sais pas vraiment comment faire.
Est-ce que vous avez une idée pour ce genre de problème? Que me suggérer vous de faire?
Partager