42Seoul/CPP Module 01

ex00

재윤 2023. 12. 1. 13:22
반응형
  • 동적 할당을 해보는 문제

변수의 메모리를 new를 통해 동적 할당하는 경우 데이터는 힙 영역에 저장됨

  • 힙에 저장된 데이터는 프로그램이 끝날때까지 유지되기 때문에 더이상 사용하지 않는 경우 반드시 delete로 해제시켜주어야 함
  • 힙에 할당하는 것은 비교적 속도가 느리고, 포인터를 역참조하여 변수의 값에 접근하는 것 역시 직접 접근하는 것보다는 느림

일반적으로 변수를 선언할 경우 정적 할당되어 데이터는 스택 영역에 저장됨

  • 스택 영역에 저장된 데이터는 해당 변수가 지정된 범위(scope)를 벗어날시 자동으로 해제 및 소멸
  • 스택에 할당하는 것은 비교적 속도가 빠르지만, 스택 자체의 크기가 비교적 작으므로 유의해야함

fun_zombie → 함수로 만들어진 좀비

Foo → 클래스 좀비

heap → 동적 할당 좀비

 

없어지는 순서

함수로 만들어진 좀비 → 동적할당 좀비 → 클래스 좀비

 

main.cpp

#include "Zombie.hpp"

int	main(void)
{
	Zombie zombie_stack("Foo");
	Zombie *heap_zombie = newZombie("heap_zombie");
	
	randomChump("fun_zombie");
	zombie_stack.announce();
	heap_zombie->announce();
	delete heap_zombie;
}

newZombie.cpp

#include "Zombie.hpp"

Zombie	*newZombie(std::string name)
{
	Zombie *result = new Zombie(name);
	return (result);
}

 

randomChunmp.cpp

#include "Zombie.hpp"

void	randomChump(std::string name)
{
	Zombie tmp(name);
	tmp.announce();
}

 

Zombie.cpp

#include "Zombie.hpp"

Zombie::Zombie(std::string name) 
{
	this->_name = name;
}

Zombie::~Zombie()
{
	std::cout << this->_name << " is dead" << std::endl;
}

void Zombie::announce(void)
{
	std::cout << this->_name <<  " BraiiiiiiinnnzzzZ..." << std::endl;
}
반응형

'42Seoul > CPP Module 01' 카테고리의 다른 글

ex05(함수 포인터 배열)  (0) 2023.12.02
ex04  (0) 2023.12.01
ex03  (0) 2023.12.01
ex02  (0) 2023.12.01
ex01(객체 포인터 배열 할당)  (0) 2023.12.01