Warum kann ich im folgenden Code printAlternativ
, aber nicht print
anrufen? Zu meinem Verständnis sollte das Objekt entfernt werden und keines sollte funktionieren.Rufen Sie die Elementfunktion auf, obwohl das Objekt nicht existiert.
using namespace std;
class MemTest
{
public:
MemTest(string);
~MemTest();
void print();
void printAlternative();
string name;
};
void MemTest::print() {
cout << "Print: " << name << "\n";
}
void MemTest::printAlternative() {
cout << "Print Alternative\n";
}
MemTest::MemTest(string n) {
cout << "Constructor\n";
name = n;
}
MemTest::~MemTest() {
cout << "Destructor\n";
}
void call(MemTest *b) {
MemTest a("TestName");
a.print();
b = &a;
}
int main()
{
MemTest *b = NULL;
call(b);
b->print(); // This crashes
// b->printAlternative(); This works
return 0;
}
Willkommen bei Land nicht definiertes Verhalten Objekt und Compiler deklarieren. Die einzige Regel ist, dass es keine Regeln gibt. – NathanOliver
Schon mal von 'neuem' Operator gehört – Sniper
Kurze Antwort - weil' printAlternativ' auf keine Member der Klasse zugreift, also eine Instanz nicht _technisch_ benötigt wird. Aber das funktioniert nicht garantiert. – icabod