CharmStrange / Study

What I studied.
0 stars 0 forks source link

class : 변수와 포인터 #1

Open CharmStrange opened 1 year ago

CharmStrange commented 1 year ago
#include 
using namespace std;

class Address {
public:
    int* getAddress(int object) {return &object;} 
};

int main() {
    Address A;
}

위 Address 클래스의 멤버 함수 getAddress() 는 객체의 주소를 반환하게끔 되어 있다. object 를 객체라고 하면 이는 지역 변수로 선언되었고, 이 함수에 인자로 주는 객체는 함수가 종료되면 함수 스택에서 삭제(메모리까지)되기 때문에 객체의 주소를 반환해도 그것은 무효한 값이기 때문에 오류가 발생한다.

이를 해결해주기 위해 객체의 메모리에 대한 설정을 다시 해 준다. 예를 들어 동적 할당, 전역 변수, static, 클래스 멤버 변수.

CharmStrange commented 1 year ago

직접 작성한 해결 예시 코드 :

#include <iostream>
using namespace std;

class Address {
    int* object=new int;
public:
    int* getAddress() {
        cout<<&object<<endl;
        return object;
    }
    ~Address() {delete object;}
};

class DoubleAddress : public Address {
    int* objectCabin=new int [3];
public:
    int* getAddress() {
        cout<<&objectCabin<<endl;
        return objectCabin;
    }
    ~DoubleAddress() {delete[] objectCabin;}
};

int main() {
    Address *A=new Address;
    DoubleAddress *B=new DoubleAddress;
    A->getAddress();
    B->getAddress();
}