Ich bin ein Student und ich lerne C++. Ich bin ziemlich gut in C++, immer noch "einfache" Dinge verwickeln mich. Ich habe lernen kürzlich Klassen, Methoden, Konstruktor/Deconstructor, Vererbung, virtuelle usw. habe ich diesen Code:Return Klasse Destruktor
#include <iostream>
using namespace std;
class test {
int a, c;
public:
test() { cout << "Constructor\n"; }
test(int a) :a(a) { cout<<"Explicit Constructor\n"; }
test foo(const test&, const test&);
~test() { cout << "DECONSTRUCTOR!\n"; }
};
test test::foo(const test &t1, const test &t2) {
test rez;
rez.c = t1.a + t2.a;
return rez;
}
void main() {
test t1(5), t2(21), rez;
rez.foo(t1, t2);
cin.ignore();
}
Ich weiß, dass in foo ich eine lokale Klasse erstellen, wenn außerhalb des Bereichs gelöscht. Wenn also foo aufgerufen wird, sollte ich einen Konstruktor und einen Destruktor sehen, aber es gibt mir noch einen Dekonstruktor, also habe ich einen Konstruktor für zwei Destruktoren.
Sie müssen auch den Kopierkonstruktor Druck haben. – NathanOliver
Nur ein FYI: Der Konstruktor nimmt ein einzelnes 'int' Argument, es ist nicht wirklich * explizit * mit C++ Terminologie. –
Ich werde jemand anderen eine definitive Antwort geben lassen, aber ich bin ziemlich sicher, was Sie sehen, ist 'rez' in' test :: foo' wird zerstört, und dann der Rückgabewert von 'rez.foo (t1 , t2) 'zerstört werden – Hill