본문 바로가기

[ C/ C++ 프로그래밍 ]/[ C/C++ ]

스마트 포인터

ㅇ 출처 :


#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