반응형
- 동적 할당을 해보는 문제
변수의 메모리를 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 |