Der Destruktor wird jedoch nur 1x aufgerufen. Warum ist das so?
Garantiert nicht!
Die übrigen Aufrufe erfolgen erst beim Verlassen der
main-Funktion, nach deinem
system("Pause");, so dass du die Ausgabe nicht siehst. Das
system("Pause"); solltest du dir sowieso abgewöhnen. Brauchst du eigentlich auch gar nicht. Visual Studio baut doch automatisch so eine "Drücken Sie eine Taste ..."-Aufforderung ein. Zumindest wenn du das Programm mit Strg+F5 startest.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
|
CVektor3D operator+=(const CVektor3D &rhs)
{
CVektor3D temp(*this);
m_x+=rhs.m_x;
m_y+=rhs.m_y;
m_z+=rhs.m_z;
return temp;
}
|
Diese Implementierung ist gar nicht gut! Der Operator
+= sollte nicht eine Kopie des alten Objektzustands zurückliefern, sondern per Konvention das aktuelle Objekt verändern und eine Referenz darauf zurückliefern. Wenn du
int i = 0; schreibst und dann
std::cout << (i += 42), dann wird ja auch 42 ausgegeben und nicht 0. Richtig wäre also:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
|
CVektor3D& operator+=(const CVektor3D &rhs)
{
m_x+=rhs.m_x;
m_y+=rhs.m_y;
m_z+=rhs.m_z;
return *this;
}
|