일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 400에러
- git명령어
- 아펠가모 선릉
- http상태코드
- 아펠가모
- kotiln
- 스프링 AOP
- 마드리드
- HTTP #웹기술
- kopring
- Srping AOP
- 바르셀로나
- 스페인
- 그라나다
- 아펠가모선릉
- 스페인 준비물
- db index
- Kotlin
- b-tree index
- 본식후기
- c# scv
- 관심지향프로그래밍
- 코프링
- sprintboot
- HTTP
- 코틀린 함수
- @Component
- 코틀린
- elk
- 세비야
- Today
- Total
끄적이는 메모장
[C++11] unique_ptr / smart pointer 본문
#smart pointer (스마트포인터)
1. 일반 포인터는 new를 이용하여 메모리를 할당 한 후 delete 연산을 호출 하지 않으면 메모리 누수가 발생한다.
2. 예기치 못하게 동적 할당된 메모리를 해제 할 수 없는 경우가 발생한다.
=> 스마트 포인터는 이러한 일반 포인터에서 발생할 수 있는 문제를 쉽게 해결하는 것에 도움을 주려고 등장했다.
헤더는 #incldue<memory>
# auto_ptr
객체를 할당하면 초기화가 된다
std::auto_ptr<ExampleClass>frist(new ExmplaeClass);
frist 라는 스마트 포인터 객체가 생성 되었다
std::auto_ptr<ExampleClass>second(first);
이때, first라는 객체는 second라는 객체에 복사가 될까? 이동이 될까?
답은 이동이 된다. 즉, second라는 객체가 참조, 소멸 등의 역할을 모두 하고 first는 NULL이 된다.
# unique_ptr (C++11)
말 그대로 고유해야 하는 포인터이다. 힙 영역에 동적으로 객체를 할당하고 그에 대한 소유권을 갖는다.
void func()
{
unique_ptr<double> p(new double(1.0));
...
}
int main()
{
func()
}
func 내에 선언된 p는 main 함수에서 func()함수가 실행되고 끝남과 동시에 소멸되게 된다.
즉, 굳이 delete를 해줄 필요가 없는 것이고 unique_ptr이 알아서 메모리 해제를 수행한다.
unique_ptr의 이동은 대입 연산자로 불가능
unique_ptr<double> p1(new double(1.0));
unique_ptr<double> p2 = p1
불가능 하다
데이터의 이동은 std::move()를 이용하여만 한다.
unique_ptr<double> p1(new double(1.0));
unique_ptr<double> p2 = move(p1);
이 경우 p1은 NULL이 된다.
할당된 값을 지우고 싶다면 reset을 사용하면 된다.
p1.reset
주의할 점은
const unique_ptr<double> p1(new double(1.0));
const로 선언된 포인터는 이동이 불가능하다.
'C, C++, C# > C++ 공부' 카테고리의 다른 글
[C++11] make_shared (0) | 2018.05.30 |
---|---|
[C++11] shared_ptr / weak_ptr (0) | 2018.05.30 |
[C++11] nullptr (0) | 2018.05.30 |
[C++11] static_assert (0) | 2018.05.30 |
[C++11] auto (0) | 2018.05.30 |