안녕하세요. 바로 접니다. letitkang입니다.
오랜만에 글쓰네요... 제가 이렇습니다 ㅠㅠ
본론으로 들어가서 오늘은 new, delete 그리고 C++에서 C언어의 함수 호출법을 알아보겠습니다.
'윤성우의 C++ 열혈강의'를 보고 공부합니다!
1. new함수? delete는 뭐야?
동적할당 아시죠? 모르시면 안됩니다.
동적할당, 즉 Heap영역은 필수중의 필수입니다!
잘 모르시면 C언어의 동적할당을 정독하시기 바랍니다!
C언어에서 동적할당 하면 malloc와 free 함수를 떠오르게 됩니다.
C언어에 비유하자면 malloc -> new, free -> delete 입니다.
C언어에서는 동적할당에 특징이 2가지 있습니다.
1. 메모리를 할당할 대상의 정보들은 무조건 바이트 단위이다.
2. 반환형이 void형이기 때문에 형변환을 해야된다.
이렇기 때문에 불편한점이 많았습니다.
그러나 C++은 C에 플러스 플러스 된것입니다!!!
C++에서는 위의 두가지가 사라집니다.
밑의 예제를 한번 살펴보겠습니다. new로 동적할당을 하는 예제입니다.
===============================================================================================
int형 변수의 할당 int * ptr1 = new int;
double형 변수의 할당 double * ptr2 = new double;
길이가 3인 int형 배열의 할당 int * arr1 = new int[3];
길이가 7인 double형 배열의 할당 double * arr2 = new double[7]
===============================================================================================
위의 문장을 읽어보면 됩니다. 쉽다고 생각합니다.
다음은 delete로 메모리를 해제하는 예제를 살펴보겠습니다.
===============================================================================================
앞서 할당한 int형 변수의 소멸 delete ptr1;
앞서 할당한 double형 변수의 소멸 delete ptr2;
앞서 할당한 int형 배열의 소멸 delete [ ]arr1;
앞서 할당한 double형 배열의 소멸 delete [ ]arr2;
===============================================================================================
메모리 소멸 시키는 것도 간단합니다.
C++의 동적할당에 대한 소스를 살펴 보겠습니다.
===============================================================================================
동적할당에 대한 소스 코드 예제
===============================================================================================
1 #include <iostream>
2 #include <string.h>
3
4 using namespace std;
5
6 char * MakeStr(int len)
7 {
8 // char* str=(char*)malloc(sizeof(char)*len);
9 char * str = new char[len];
10 return str;
11 }
12
13 int main(void)
14 {
15 char * str = MakeStr(20);
16 strcpy(str, "New Delete!!!");
17 cout<<str<<endl;
18 // free(str);
19 delete []str;
20 return 0;
21 }
===============================================================================================
결과
===============================================================================================
New Delete!!!
위의 예제는 한줄 한줄 살펴보시면 이해가 되실겁니다.
C++에서는 malloc와 free를 호출할 경우, 문제가 될 수도 있습니다.
그러므로 new, delete를 사용해야됩니다.
또한 뒤에서 나오는 객체를 생성하기 위해서는 new와 delete를 사용해야됩니다.
그 이유는 new와 malloc의 동적할당 방법이 다르기 때문입니다.
객체는 new로 생성을 해야됩니다. malloc로 생성하게 된다면, 동작 안하는 부분이 있습니다.
2. 동적할당 된 변수는 포인터를 사용하지 않아도 접근할 수 있다!
이전에 배웠던 참조자 선언은 변수를 대상으로 가능합니다.
그렇다면 new로 할당된 메모리 공간에도 참조자로 가능할까요?
물론 가능합니다.
===============================================================================================
int*ptr = new int;
int &ref = *ptr;
ref = 20;
cout<<*ptr<<endl;
===============================================================================================
참조자의 선언을 통해서 힙영역에 접근할 수 있습니다.
2. C++에서 C언어 표준함수 호출하기
먼저 헤더파일을 한번 보겠습니다.
c언어의 헤더파일을 쓰고, 표준 함수를 호출하면 됩니다.
===============================================================================================
#include <stdio.h> -> #include <cstdio>
#include <stdlib.h> -> #include <cstdlib>
#include <math.h> -> #include <cmath>
#include <string.h> -> #include <cstring>
===============================================================================================
위의 예제만 보더라도 특징이 있는것을 알 수 있습니다.
헤더파일의 c를 더하고 .h를 빼면됩니다!
헤더파일을 선언하고, 헤더파일에 있는 표준 함수를 사용하시면됩니다.
그리고 한가지 말씀 드리겠습니다.
C++에서는 C++ 헤더를 선언해야 됩니다.
왜냐하면 '하위버전의 호환성'을 제공하기 위해서입니다.
또한 C++함수는 오버로딩이 되어 있기 때문에, C언어 헤더파일을 사용하면 문제가 생깁니다.
오늘의 포스팅은 여기까지입니다.
내일 부터 또 월요일이네요!
다들 열심히 공부해서 부자됩니다!
읽어주셔서 감사합니다.
'프로그래밍 > C++' 카테고리의 다른 글
[C++]C++의 용어 정의와 파일 분할 (0) | 2017.06.16 |
---|---|
[C++]C++의 구조체와 Class (0) | 2017.04.20 |
[C++]참조자(reference) 3 (0) | 2017.04.11 |
[C++]참조자(reference) 2 (0) | 2017.04.09 |
[C++]참조자(reference) 1 (2) | 2017.04.04 |