Notice
Recent Posts
Recent Comments
Link
It won't hurt to try
[C++/윈도우프로그래밍응용]13. 포인터 본문
포인터란?
메모리를 주소로 참조하기 위한 변수
- 컴퓨터 메모리 주소를 통하여 메모리의 내용에 직접 접근 하기 위해 사용
포인터의 선언
<데이터형>* <변수 이름> ;
예) int* pscore;
book* pbook;
&연산자
변수의 주소를 계산해주는 주소 연산자
- 변수 이름 앞에 &를 붙여 주소 계산 가능
- 추출된 주소는 주소끼리의 연산에 사용되거나 포인터 변수등에 저장할 수 있음
*연산자
주소를 찾아가서 읽고 쓸 수 있는 간접 참조 연산자
- 포인터 변수의 앞에 사용하여
포인터 변수에 저장된 주소가 가리키는
메모리의 위치를 읽고 쓸 수 있음
동적 메모리 할당(Dynamic Memory Allocation)
프로그램이 실행 도중 메모리를 할당받는 것
- 힙(heap) 메모리 공간
→ 아직 사용하지 않았지만 할당받을 수 있는 메모리 공간 - 동적 메모리 할당을 이용하여
힙으로부터 필요한 메모리 공간을 할당받아 사용 가능
동적 메모리 할당의 장점
- 필요한 만큼 메모리를 할당받아 사용 가능
동적 메모리 할당의 과정
- 동적 메모리 할당 요청
- 프로그램에서 라이브러리나 API등을 활용하여 동적 메모리 할당을 요청함
- C언어의 경우 → stdlib.h의 malloc() 함수 등으로 동적 메모리 할당 요청 가능
- C++언어의 경우 → new 연산자를 사용하여 요청
- 운영체제(OS)의 메모리 할당 승인
- 운영체제는 메모리 할당 요청을 받아 검토함
- 사용가능한 메모리가 존재하는 경우
→ 프로그램에게 사용 가능한 메모리의 구역을 할당함 - 프로그램은 논리적 메모리 주소를 사용하여
메모리의 일부 구역 사용(=읽기+쓰기)이 가능해짐
- 프로그램에서 메모리 사용
- 프로그램에서는 메모리를 자유롭게 사용 가능함
예) 할당받은 메모리에 값을 저장하는 작업
예) 할당받은 메모리에 저장된 값을 읽어오는 작업 - 메모리 반납을 수행하기 전까지
할당 받은 메모리는 다른 프로그램에게 할당되지 않음
- 프로그램에서는 메모리를 자유롭게 사용 가능함
- 사용한 메모리를 운영체제에게 반납
- 사용한 메모리를 운영체제에게 반납 필요
- C언어의 경우 → stdlib.h의 free() 함수 등으로 가능
- C++언어의 경우 → delete 연산자로 반납 가능
- 메모리를 반납하지 않으면
→ 운영체제는 메모리를 계속 사용하고 있는 것으로 간주
→ 메모리 누수 현상(memory leak) 발생 - C/C++ 언어 사용자의 경우
메모리 누수현상이 발생하지 않도록
꼼꼼한 메모리 관리(=할당→사용→반납) 구현 필요
new 연산자
운영체제로부터 동적으로 메모리를 할당받는 연산자
- new 뒤에는 자료형을 적음
- 동일 자료형으로 여러개 할당받는 경우 → 개수를 적음
- new 연산자의 연산 결과 = 주소→ 포인터형에 저장
<데이터형>* <변수 이름> = new <데이터형>;
<데이터형>* <변수 이름> = new <데이터형>[<개수>];
#include <iostream>
#include "book.h"
using namespace std;
int main()
{
Book *pBook = new Book("책1", 10000);
// 기존방식
(*pBook).print();
// -> 연산자를 사용한 방식
pBook->print();
delete pBook;
return 0;
}
delete연산자
운영체제에게 할당받은 메모리를 반납하는 연산자
- delete 뒤에는 변수 이름을 적음
- 동일 자료형으로 여러개 할당받은 경우
→ delete와 변수 이름 사이에 []를 적음
delete <변수 이름>;
delete [] <변수 이름>;
this 포인터
함수가 소속되어 실행되고 있는 객체 자체를 가리킴
- 객체의 주소를 나타내는 키워드이기 때문에 포인터로 분류
- 객체의 멤버 함수를 정의할 때,
맴버 변수 및 다른 멤버 함수 참조에 유리
// 멤버변수의 초기화
Book::Book(string name, int price) : title(name), price(price)
{
}
// this포인터를 이용한 멤버변수의 초기화
Book::Book(string name, int price)
{
this->title = name;
this->price = price;
}
300x250
300x250
'C++ > 윈도우프로그래밍응용' 카테고리의 다른 글
[C++/윈도우프로그래밍응용]15. 복사 생성자와 정적 변수 (0) | 2021.10.09 |
---|---|
[C++/윈도우프로그래밍응용]14. 포인터의 특수한 용법 (0) | 2021.10.03 |
[C++/윈도우프로그래밍응용]12. 배열 (0) | 2021.10.03 |
[C++/윈도우프로그래밍응용]11. 접근제어와 멤버함수 (0) | 2021.09.23 |
[C++/윈도우프로그래밍응용]10. 생성자와 소멸자 (0) | 2021.09.23 |
Comments