B2024001225 윤지선
2학기 10주차 예습과제 본문
const 동적 메모리 할당(new, delete)
const
변수에 const 라는 키워드를 사용하여 상수(constant)의 의미를 갖게 하여 그 내용을 변경할 수 없게 한다
# define XX 1
const int x = 1; // 변수 x는 항상 초기값 1. 변경 불가
int const y=1; //비추, const는 자료형 앞에 씀
함수에 사용하는 const
함수 선언 시 함수, 매개변수, 리턴형에 const를 선언하여 이들이 읽기 전용(read only)임을 나타낸다onst 동적 메모리 할당(new, delete)
const
변수에 const 라는 키워드를 사용하여 상수(constant)의 의미를 갖게 하여 그 내용을 변경할 수 없게 한다
# define XX 1
const int x = 1; // 변수 x는 항상 초기값 1. 변경 불가
int const y=1; //비추, const는 자료형 앞에 씀
함수에 사용하는 const
함수 선언 시 함수, 매개변수, 리턴형에 const를 선언하여 이들이 읽기 전용(read only)임을 나타낸다
const 멤버
- const형 멤버 함수는 해당 멤버변수를 변경하는 치환(replacement) 연산을 수행할 수 없다.
- const로 지정된 함수에서는 멤버변수의 값을 변경할 수 없다.
- const 함수는 const함수만 호출할 수 있으며 일반 멤버함수에는 접근할 수 없다.
- 생성자와 소멸자에서는 const를 사용할 수 없다.
- const형을 선언하고자 하면 멤버변수는 형 앞에 const를, 멤버함수는 함수의 괄호 다음에 const를 추가한다.
포인터
포인터는 C와 C++ 언어를 다른 언어와 차별화시키는 가장 큰 특징이다.
포인터를 이용하게 되면 기계어나 어셈블리 언어처럼 메모리의 주소를 이용해 메모리의 내용을 직접 접근할 수 있따.
포인터가 사용되는 경우
- call by referenc로 함수로부터 한 개 이상의 값을 리턴할 때
- 함수들 간에 배열이나 문자열을 전달할 때
- 배열 조작을 쉽게할 때
- 연결 리스트( linked list)나 이진트리(binary tree) 등 복잡한 자료 구조를 만들 때
- 메모리를 동적으로 할당할 때
포인터와 주소
- 메모리에서는 위치를 구분하기 위해 순서대로 번호가 붙어있는데 이것을 메모리의 주소, 번지, address라 함
int sum=0;
-> 변수를 초기화 하면서 선언하면, int형이므로 4바이트 메모리 공간이 확보되고 초기값이 0으로 할당됨
-> sum 변수가 실제로 할당된 메모리의 주소를 알고 싶다면 &연산자를 사용하여 &sum이라고 하면 변수가 기억되어 있는 메모리 번지를 알 수 있음.
- 메모리의 주소를 저장하려면 일반 변수가 아닌 포인터를 사용
- 포인터라고만 해도 되지만 주소를 저장하는 변수이므로 포인터 변수라고도 함
*: 선언문(구두점) vs 실행문(연산자)
- 선언문 : 포인터를 선언할 때
- 실행문: 주소로 가서 값을 가져올 때
- *이 선언문에서 사용되는지 실행문에서 사용되는지에 따라서 다름
- 실행문에서 *는 포인터 변수에 저장된 주소로 가서 실제 데이터 값을 가져오는데 사용하는 참조 연산자로 간접 값(indirect value) 연산자, dereferencing 연산자라고도 함
- C에서 동적 메모리 할당을 할 경우 malloc() 함수를 사용
- 이러한 표준 함수들은 C++에서도 사용할 수 있지만 C++에서는 메모리를 할당하고 해제하는데 더 편리하고 안전한 방법을 사용
new와 delete
new는 메모리를 동적으로 할당하고, 할당된 메모리에 대한 주소를 반환하는 연산자
- malloc() 함수와 마찬가지로, 요구한 만큼의 메모리가 충분하지 않으면 new는 null포인터를 반환한다
delete는 free() 함수와 마찬가지로, 더 이상 필요 없는 메모리를 해제한다.
해제하지 않으면 메모리 누수가 발생하여 다른 프로그램에서도 해당 메모리는 사용하지 못한다.
new와 delete의 장점
new는 지정된 형의 크기 만큼 메모리를 자동적으로 할당해준다.
-> 필요한 메모리 크기를 꼐산하기 위해 sizeof()와 같은 연산자가 필요 없다.
new는 지정된 형의 포인터(메모리 시작 주소)를 자동적으로 반환한다.
new와 delete는 중첩이 가능하다.
동적으로 할당된 객체를 초기화한다. (생성자를 자동으로 호출한다.)
malloc.h나 stdlib.h를 포함할 필요 없
'2024년 2학기 > C++ 프로그래밍' 카테고리의 다른 글
2학기 11주차 예습과제 (0) | 2024.11.11 |
---|---|
2학기 10주차 과제 (0) | 2024.11.04 |
2학기 9주차 과제 (0) | 2024.10.28 |
2학기 9주차 예습과제 (0) | 2024.10.28 |
C++ 시험범위 PPT (0) | 2024.10.19 |