[C++] 객체의 동적 생성

2020. 6. 14. 15:13·Computer Science/Programming Language

동적으로 객체 생성 - new 사용

객체에 대한 포인터 사용하여 객체 사용

명시적으로 객체 삭제 - delete 사용

 

Car *dynCar = new Car;	//동적 객체 생성
dynCar -> speed = 100;	//동적 객체 사용
delete dynCar;		//동적 객체 삭제

 

<예시>

#include <iostream>
#include <string>
using namespace std;

class Car {
public: 
	//멤버 변수 선언
	int speed; //속도
	int gear;	//기어
	string color;	//색상

	//멤버 함수 선언
	void speedUp() {	//속도 증가 멤버 함수
		speed += 10;
	}
	void speedDown() {	//속도 감소 멤버 함수
		speed -= 10;
	}
	void show() {	//상태 출력 멤버 함수
		cout << speed << endl;
		cout << gear << endl;
		cout << color << endl;
	}
};

int main() {
	// 객체 동적 생성
	Car *dynCar = new Car;

	//동적 객체 사용
	dynCar->speed = 100;
	dynCar->gear = 2;
	dynCar->color = "green";
	dynCar->speedUp();
	dynCar->speedDown();
	dynCar->show();

	//객체 동적 삭제
	delete dynCar;

	return 0;
}

 

동적으로 객체를 생성하는 이유에 대해 궁금증이 생겼다. (책에 나오지 않아 구글 검색을 이용)

 

동적으로 객체를 생성하는 경우와 아닌 경우의 차이 : 메모리 영역의 차이

동적으로 객체를 생성할 경우 - 힙 영역

동적으로 객체를 생성하지 않을 경우 - 스택 영역

 

스택 영역 

- 함수내에 정의된 지역 변수가 저장되는 영역(즉, 일반적인 변수가 올라가는 영역)

    cf) 함수는 LIFO(Last In First Out) 형태의 스택 구조를 갖고 있음

- 범위를 벗어날 경우 메모리 자동으로 해제

 

힙 영역 

- 동적할당을 통해 생성된 동적 변수를 관리하기 위한 영역 (동적 변수 : new를 통해 생성되는 변수)

- 직접 해제하기 전까지는 메모리에 유지됨

 

스택 영역의 경우, 컴파일러가 미리 공간을 예측할 수 있기 때문에 함수에서 잠깐 쓰고 자동으로 해제 시키기 위해서는 스택 영역을 사용하는 것이 좋음

동적 변수의 경우 어느정도 할당 될 지 예측할 수 없기 때문에 runtime(즉 프로그램 실행중)에 결정됨. 따라서 프로그램 내에서 해당 변수를 계속 사용하기 위해서는 힙 영역을 사용하는 것이 좋음

 

저작자표시 비영리 변경금지 (새창열림)

'Computer Science > Programming Language' 카테고리의 다른 글

[JAVA] 메모리 사용 영역(Runtime Data Area)  (0) 2020.07.02
[C++] 접근자와 설정자  (0) 2020.06.14
[C++] 함수 호출 시 인수 전달 방식  (0) 2020.06.13
[C++] 참조자(reference)  (0) 2020.06.13
[C/C++] 동적 메모리 할당(dynamic memory allocation)  (0) 2020.06.12
'Computer Science/Programming Language' 카테고리의 다른 글
  • [JAVA] 메모리 사용 영역(Runtime Data Area)
  • [C++] 접근자와 설정자
  • [C++] 함수 호출 시 인수 전달 방식
  • [C++] 참조자(reference)
BS Kwak
BS Kwak
  • BS Kwak
    Slow but steady wins the race
    BS Kwak
  • 전체
    오늘
    어제
    • 카테고리 (161)
      • Project (2)
      • Next.js (3)
      • HTML+CSS+JS (17)
      • Computer Science (139)
        • Programming Language (52)
        • 자료구조와 알고리즘 (75)
        • Digital circuit (3)
        • 기타 error (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    cmd error
    티스토리챌린지
    오블완
    LNK2001
    mysql error
    런타임 에러
    해시
    leetcode
    c++error
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
BS Kwak
[C++] 객체의 동적 생성
상단으로

티스토리툴바