je le code suivantdestructor et appeler constructeur de copie .. (pourquoi est-elle appelée à ces moments)
#include <iostream>
using namespace std;
class Object {
public:
Object(int id){
cout << "Construct(" << id << ")" << endl;
m_id = id;
}
Object(const Object& obj){
cout << "Copy-construct(" << obj.m_id << ")" << endl;
m_id = obj.m_id;
}
Object& operator=(const Object& obj){
cout << m_id << " = " << obj.m_id << endl;
m_id = obj.m_id;
return *this;
}
~Object(){
cout << "Destruct(" << m_id << ")" << endl;
}
private:
int m_id;
};
Object func(Object var) { return var; }
int main(){
Object v1(1);
cout << "(a)" << endl;
Object v2(2);
v2 = v1;
cout << "(b)" << endl;
Object v4 = v1;
Object *pv5;
pv5 = &v1;
pv5 = new Object(5);
cout << "(c)" << endl;
func(v1);
cout << "(d)" << endl;
delete pv5;
}
qui sort
Construct(1)
(a)
Construct(2)
2 = 1
(b)
Copy-construct(1)
Construct(5)
(c)
Copy-construct(1)
Copy-construct(1)
Destruct(1)
Destruct(1)
(d)
Destruct(5)
Destruct(1)
Destruct(1)
Destruct(1)
J'ai quelques problèmes avec cela, d'une part pourquoi Object v4 = v1;
appelle le constructeur de copie et produit Copy-construct(1)
après l'impression de (b)
.
également après l'impression de (c)
le constructeur de copie est à nouveau appelé deux fois ?, je ne suis pas certain de la façon dont cette fonction fonctionne pour produire cette Object func(Object var) { return var; }
et juste après que Destruct(1)
est appelé deux fois avant de (d)
est imprimé.
désolé pour la longue question, je suis confus avec ce qui précède.
ahk merci beaucoup. aussi une question de plus, les 3 dernières sorties de 'Destruct (1)' sont dues à 'Object v1 (1) ;, v2 = v1, Object v4 = v1;' correct? et 'Destruct (5)' est venu juste avant comme il a été supprimé manuellement? – silent