#include <iostream>
using namespace std;
// 스마트 포인터:
// 1. 정의: 다른 type의 포인터 역활을 하는 객체.
// 2. 장점: 일반 포인터가 아니라 객체이다 (즉생성자, 소멸자, 복사, 대입)의
// 과정을 함수로 제어할 수 있다.
// 3. 주로->, *를 재정의 한다
// 또한 소멸자를 사용 garbage collector 기능을 수행.
// 4. template으로 만들어야 한다.
class Test
{
public:
int x;
void foo() { cout << "foo" << endl; }
};
template<typename T>class SPTR
{
T *_p;
public:
SPTR( T * p = 0) : _p(p) {}
~SPTR() { delete _p; }
T *operator->() { return _p; }
T &operator*() { return *_p; }
};
void main()
{
SPTR <int>p = new int;
*p = 10;
cout << *p << endl;
}
/*
void main()
{
// Test *p = new Test 였다면 블록을 벗어날때 delete를 해야한다
// 하지만 스마트 포인터를 만들면 객체이기 때문에 소멸자에서 처리할 수 있다
SPTR<Test>p = new Test; // SPTR p(new Test)
(*p).x = 10; // (p.operator*()).x = 10
p->foo(); // (p.operator->())foo() 의 모양
// 하지만 C++ 컴파일러는 아래처럼 해석해 준다.
// (p.operator->())->foo()
// Test *p = new Test;
// p->foo();
// delete p;
}
*/
'[ C/ C++ 프로그래밍 ] > [ C/C++ ]' 카테고리의 다른 글
[C++] 인라인(inLine) 함수 (0) | 2010.07.13 |
---|---|
Visual Studio .net 책갈피 단축키 (0) | 2010.06.30 |