객체생성

정재민·2021년 4월 20일
0

C/C++

목록 보기
3/5

1. 객체 생성 방법

class Person
{
    int age;
public:
    Person(int age)
    {
        this->age = age;
        cout << "생성자 호출 / 나이 :" << age << endl;
    }
    ~Person()
    {
        cout << "소멸자 호출" << endl;
    }
    void GetAge()
    {
        cout << "나이는 : " << age << "입니다." << endl;
    }
};
void Test01()
{
    // 해당 함수 내에서만 메모리 유지
    Person person01(15);
    person01.GetAge();
};
void Test02()
{
    // 클래스 동적 할당 : delete 하기 전까지 계속 메모리 유지
    Person *person02 = new Person(30);
    person02->GetAge();
    //delete person02;
};
int main(){
    Test01();
    Test02();
    return 0;
}

생성자 호출 / 나이 :15
나이는 : 15입니다.
소멸자 호출
생성자 호출 / 나이 :30
나이는 : 30입니다.

2. 스택메모리 사용

  • Person person01(15);
    함수에만 쓰고 자동으로 해제시키기 위해 스택메모리에 올려둔 것.
    해당 함수에서 벗어나면 자동으로 메모리가 해제.

3. 힙메모리 사용

Person *person02 = new Person(30);
이 방법은 계속해서 객체를 사용하기 위해 힙 영역의 메모리에 올립니다.
이때는 직접 delete로 해제해주기 전까지는 메모리가 해제되지 않기때문에 함수 밖에서도 메모리가 유지.
이 방법은 메모리 누수가 발생할 수 있기 때문에 꼭 delete로 메모리를 해제해주어야 합니다.

4. 스택 메모리 VS 힙 메모리

  • 스택 메모리 : 함수내에 정의된 지역 변수가 저장되는 영역
    ( 함수는 LIFO(Last In First Out)의 형태를 가진 스택 구조를 가지고 있음 )
  • 힙 메모리 : 동적할당을 통해 생성된 동적 변수를 관리하기 위한 영역
    ( new를 통해 생성되는 변수 )

스택 영역의 경우 컴파일러가 미리 공간을 예측할 수 있지만, 동적 변수의 경우 어느 정도 할당 될 지 예측할 수 없기 때문에 런타임(프로그램 실행중)에 결정됩니다.

profile
화이팅

0개의 댓글

관련 채용 정보