Remarque: J'hésitais à poser cette question dans le même thread que celui sur le mot clé const, mais je ne pense pas que ce soit la même problématique.

Alors voilà ma question:

J'ai 3 classes, A, B et C. A est quelconque. B est définie ainsi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
class B
{
public:
  B():m_A(new A){}; //le constructeur de B créé une instance de A
protected:
  A m_A; //l'instance de A appartient à B
};
et C, qui doit avoir un pointeur sur B::m_A, est défini ainsi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
class C
{
public:
  C(A* pA):m_pA(pA){} // le constructeur de C demande un pointeur sur A
private:
  A* m_pA;
};
Pour résumé, nous avons:
- Une classe B qui possède une instance de A: c'est B qui instancie A et si B est détruit, cette instance de A est détruite également.
- Une classe C qui possède un pointeur (référence??) sur l'instance de A créée par B.

Questions:
1/ Je voudrais que C ne puisse pas modifier l'instance de A dont il possède un pointeur. Comment faire?
2/ Comment éviter les erreurs possibles dûes au fait que si je détruit B, le pointeur C::m_pA ne sera plus valide?

J'espère avoir été suffisamment clair. Si ce n'est pas le cas, n'hésitez pas à me demander des précisions.

Merci