캠프에서 C언어 완전 기초.. 부터 수업을 하길래 생각난 김에 차이에 대해서 공부해보려고 하다가
동적할당이라는 주제를 선택했다.
단순 메모리 확보/해제
객체의 생성/소멸까지 포함된 메모리 관리
int* arr = (int*)malloc(sizeof(int) * 10);
free(arr);
int* arr = new int[10];
delete[] arr;
생성자/소멸자 없이 메모리 덩어리
class A
{
A() { printf("생성"); }
~A() { printf("소멸"); }
}
A* a = new A();
delete a;
void* ptr = malloc(sizeof(int));
int* iptr = (int*)ptr; // 캐스팅 필요
int* ptr = new int;
int* a = (int*)malloc(sizeof(int)); // 더미값
int* a = new int(); // 0 초기화
int* b = new int(10); // 값 지정 가능
int* arr = (int*)malloc(sizeof(int) * 10);
free(arr);
int* arr = new int[10];
delete[] arr;
if (ptr == NULL) { ... }
int* ptr = new int; // 실패시 예외 발생
메모리 자동 해제까지 염두하는 설계법
class string
{
public:
char* c = nullptr;
string(size_t len)
{
c = new char[len];
}
~string()
{
delete[] c;
}
};
string s(100);
strcpy(s.c, "Hello, world!");
throw 0;
// 출처 : https://m.blog.naver.com/kmc7468/220927032462
std::shared_ptr, std::unique_ptr 등 모두 RAII 패턴으로 작성됨
모던C++에서는 STL 사용하는게 정석
C API는 malloc/free로 작성되어 있어서