Zauważ, że metody klas nie są przypisane do konkretnych obiektów, tylko do klasy jako całości.
Jeśli metoda wykorzystywałaby odwołania do danych, przechowywanych w instancji klasy, wtedy dostałbyś błąd wykonania (odwoływałbyś się do adresu, do którego albo nie masz dostępu albo pod którym nie ma danych klasy).
Minimalnie zmodyfikowany kod, ilustrujący to co napisałem:
#include <string>
#include <iostream>
using namespace std;
class Ctest {
int x;
public:
Ctest(int i):x(i){}
void show() {
cout << "LOL" << x << endl;
}
};
int main(int argc, char **argv)
{
Ctest *tt = new Ctest(12);
tt->show(); // Tutaj wyświetla bo powinien
delete(tt);
/* w metodzie odwołujemy się do danych, posiadających adres,
do którego już nie mamy dostępu - czasami się uda, czasami
nie - generalnie nie powinniśmy już używać tego wskaźnika po zwolnieniu pamięci,
ta operacja jest nieprawidłowa:
*/
tt->show();
tt = NULL;
tt->show(); // tutaj naturalnie również nie zadziała
int test;
cin >> test;
return 0;
}
Nie jestem pewny, czy to co pokazałeś nie jest przykładem UB.