본문 바로가기

포인터3

[ C++ ] 스마트 포인터의 템플릿화 #ifndef __SMART_POINTER_TEMPLATE_H_ #define __SMART_POINTER_TEMPLATE_H_ #include #include using namespace std; template class Smart_Pointer { private: T * ptr; public: Smart_Pointer(T* _ptr); T& operator*() const; T operator->() const; ~Smart_Pointer(); }; template Smart_Pointer::Smart_Pointer(T* _ptr) : ptr(_ptr) { } template T& Smart_Pointer::operator*() const { return *ptr; } template T Smart.. 2019. 11. 30.
[ C++ ] 스마트 포인터 ( Smart Pointer ) 스마트 포인터는 말 그대로 똑똑한 포인터라는 뜻이다. 사실 스마트 포인터는 객체인데, 포인터의 역할을 하는 객체를 뜻한다. 그럼 스마트 포인터란 무엇일까? 일단 포인터를 다시 살펴보자. 포인터는 메모리 주소를 저장하는 변수이다. 하지만 포인터는 단점이 있는데, 바로 new 연산자를 이용해서 동적 할당을 하게 되면 delete 연산자를 통해서 메모리 해제를 시켜줘야 한다는 점이다. ( 하지 않으면 메모리 누수가 발생한다. ) 이런 단점을 보완하여 생겨난 것이 스마트 포인터이다. 즉, delete 연산이 자동으로 일어난다는 점이다. 예제를 살펴보자 먼저 점에 대한 클래스이다. 연산자의 오버 로딩이 되어있다. 스마트 포인터는 포인터처럼 동작하는 객체이기 때문에, 두 연산자의 정의는 필수이다. 생성자의 인자로 .. 2019. 11. 28.
[ C++ ] const ( 상수 )의 활용 const 키워드와 함께 정의한 변수의 값은 수정이 불가능하다. 즉, 프로그래밍시에 바뀌어서는 안될값이 있을 경우 활용할 수 있다. 또한 코드가 길어질 경우 실수로 변수의 값이 바뀌어 지는것을 방지할 수 있다. const의 예는 다음과 같다. const int num = 10; -> "변수 num을 상수화" 그래서 num 값을 변경시에 컴파일 에러가 발생하는 것을 볼 수 있다. 그럼 포인터의 예를 살펴보자. const int *ptr1 = # -> "포인터 ptr1을 이용해서 num의 값을 변경 할 수 없음." 그래서 ptr1로 ptr1가 가리키고 있는 값을 변경할려고 할 때 컴파일 에러가 발생하는 것을 알 수 있다. 그러나 ptr1의 주소 값을 변경 할 수 있다. * num에 다이렉트로 접근하면.. 2019. 9. 5.