Notice
Recent Posts
Recent Comments
Link
It won't hurt to try
[C++/윈도우프로그래밍응용]14. 포인터의 특수한 용법 본문
스마트 포인터
스마트 포인터(Smart Pointer)
자동으로 동적메모리를 관리하는 새로운 C++기능
- new 연산자 호출 후 → delete 연산자 사용 잊음
- 동적 메모리 할당 후 메모리 반납을 잊어도
자동으로 동적메모리를 할당하여 주는 기능
스마트 포인터의 특징과 장점
- 동적 메모리 할당과 관련한 버그를 줄일 수 있음
- 자동으로 nullptr로 초기화 → 메모리 오류 방지 기능
스마트 포인터의 사용 방법
#include<memory> 삽입 필요
- 스마트 포인터를 사용하기 위해서는 memory헤더를 포함해야 사용 가능
스마트 포인터의 종류
- unique_ptr,shared_ptr, weak_ptr
- 사용이 간편하고 쉬운 unique_ptr에 대해서만 학습
delete 연산자 사용 불필요
unique_ptr의 사용
데이터형에 대하여 스마트 포인터를 사용하는 경우
- unique_ptr<데이터형> <변수이름>(new <데이터형>);
- unique_ptr<데이터형> <변수이름>(new <데이터형>[개수]);
스마트 포인터의 특징과 장점
- unique_ptr<클래스형> <변수이름>(new <클래스형>(값1, ...));
- unique_ptr<클래스형[]> <변수이름>(new <클래스형>[<개수>]);
사용예시
unique_ptr<int> pScore(new int);
*pScore = 100;
unique_ptr<int[]> pScore(new int[8]);
pScore[0] = 32;
pScore[1] = 64;
pScore[2] = 96;
※포인터 변수의 값의 영역에 진입하기 위해서는 포인터 변수 앞에 *를 붙여준다.
포인터 변수(배열) 의 경우는 변수[인덱스] 로 값의 영역에 진입하는게 가능하다.
unique_ptr<Book> pbook(new Book(strTitle, nPrice));
pbook->print();
const 포인터
const키워드
변수의 값을 변경하지 않음을 의미
- 예) int형의 정수를 선언 및 초기화하고 변경하지 않는 경우
컴파일러에 의해서 값의 변경을 막을 수 있음
- 개발자 스스로 값의 변경을 막으려고 하는 경우 사용
// 주소 : 변경◯
// 값 : 변경×
const int *p;
// 주소 : 변경×
// 값 : 변경◯
int* const p;
// 주소 : 변경×
// 값 : 변경×
const int* const p;
// const로 정의된 멤버 함수에서는 멤버 변수의 변경이 불가하다.
string Book::getTitle() const
{
return title;
}
unique_ptr을 사용한 예시
#include <iostream>
// 스마트포인터를 사용하기 위해서 불러온다.
#include <memory>
#include "book.h"
using namespace std;
int main()
{
char strTitle[100];
int nPrice;
// Book* pBook = nullptr;
cout << "책 제목: ";
cin.getline(strTitle, 100);
cout << "책 가격: ";
cin >> nPrice;
// pBook = new Book(strTitle, nPrice);
unique_ptr<Book> pBook(new Book(strTitle, nPrice));
// delete pBook;
return 0;
}
300x250
300x250
'C++ > 윈도우프로그래밍응용' 카테고리의 다른 글
[C++/윈도우프로그래밍응용]16. 연산자 중복 (0) | 2021.10.09 |
---|---|
[C++/윈도우프로그래밍응용]15. 복사 생성자와 정적 변수 (0) | 2021.10.09 |
[C++/윈도우프로그래밍응용]13. 포인터 (0) | 2021.10.03 |
[C++/윈도우프로그래밍응용]12. 배열 (0) | 2021.10.03 |
[C++/윈도우프로그래밍응용]11. 접근제어와 멤버함수 (0) | 2021.09.23 |
Comments