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:
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;
}
J'utilise donc le polymorphisme pour stocker mes objets Alarm dans AlarmManager
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?