Bonjour,
Voici une classe:Dès que je fait ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class A { public: A(const int&P_i):m_ri(P_i){} const int &m_ri; };
J'ai une belle erreur m'indiquant que je ne peux pas copier l'objet ("can't use default assignment operator" avec gcc et "'operator =' function is unavailable in 'A'" avec Visual).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int L_i(0); A a(L_i); std::vector<A> L_vect; L_vect.push_back(a);
Maintenant, je modifie comme ça:
Là, ça passe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include <new> class A { public: A(const int&P_i):m_ri(P_i){} A&operator=(const A&P_Copie) { new(this) A(P_Copie); return *this; } const int &m_ri; };
Je comprend comme ça:
Dans l'affectation, j'appelle le constructeur par copie (créé implicitement par le compilo) sur this. Donc mes deux objets réfèrent au même objet de base. Je maintient la contrainte de const.
Est-ce bien cela? Il y a-t-il d'autres conséquences/effets de bord dont il faut que je soit conscient?
Merci.
Partager