Dangling Pointer in cpp

#include <iostream>

class MyClass {
public:
    int* data;

    MyClass() : data(new int(42)) {}

    ~MyClass() {
        delete data;
    }
};

int main() {
    MyClass obj1;
    MyClass* obj2 = new MyClass();

    // Dangling Pointer Scenario 1
    int* danglingPtr1 = obj1.data;  // Pointing to memory that has been deleted
    delete obj2;  // obj2 is deleted, and danglingPtr1 becomes a dangling pointer

    // Dangling Pointer Scenario 2
    int* danglingPtr2 = obj2->data;  // Pointing to memory that has been deleted
    delete obj2;  // obj2 is deleted, and danglingPtr2 becomes a dangling pointer

    // Attempting to dereference dangling pointers (undefined behavior)
    // Uncommenting the next lines may lead to unpredictable results.
    // std::cout << *danglingPtr1 << std::endl;
    // std::cout << *danglingPtr2 << std::endl;

    return 0;
}