#include <iostream>

class TestObject
{
public:
    TestObject();
    ~TestObject();
    int getTestVariable();

private:
    int testVariable = 9999;
};

TestObject testTestObject1()
{
    TestObject testObject;
    std::cout<<"(INSIDE FUNCTION) ADDRESS OF TESTOBJECT: "<<&testObject<<std::endl;
    std::cout<<"(INSIDE FUNCTION) TESTOBJECT.VARIABLE: "<<testObject.getTestVariable()<<std::endl;
    return testObject;
}

TestObject* testTestObject2()
{
    TestObject testObject;
    std::cout<<"(INSIDE FUNCTION) RETURN (ADDRESS OF TESTOBJECT): "<<&testObject<<std::endl;
    std::cout<<"(INSIDE FUNCTION) TESTOBJECT.VARIABLE: "<<testObject.getTestVariable()<<std::endl;
    return &testObject;
}

int main()
{
    TestObject tObject1 = testTestObject1();
    std::cout << tObject1.getTestVariable() << std::endl;
    std::cout << "(IN MAIN) ADDRESS OF (TESTOBJECT): " << &tObject1 << std::endl;

    TestObject* tObject2 = testTestObject2();
    std::cout << tObject2->getTestVariable() << std::endl;
    std::cout << "(IN MAIN) TESTOBJECT POINTER: " << tObject2 << std::endl;
}