#include <memory> 필요
class CA;
typedef std::tr1::shared_ptr<CA> pCA;
typedef std::tr1::shared_ptr<char> pChar;
class CA
{
private:
int m_int;
public:
CA():m_int(0) { printf("CA()\n"); }
CA(const CA& a):m_int(a.m_int) { printf("CA(const CA& a)\n"); }
~CA(){printf("~CA()\n");}
pCA GetThis() { return pCA(this); }
int GetInt() { return m_int; }
};
struct DeletArray
{
template<typename T>
void operator()(T* t)
{
printf("DeleteArray is called\n");
delete [] t;
}
};
struct DontDelete
{
template<typename T>
void operator()(T* t) {printf("DontDelete is called\n");}
};
int _tmain(int argc, _TCHAR* argv[])
{
//단순한 포인터 클래스 객체
pCA p1(new CA());
pCA p2(new CA(*p1));
//복사도 잘되고 잘 지워짐
//배열형태의 포인터
pChar p3(new char[10], DeletArray());
//DeletArray()로 삭제처리를 설정해 delete 가 아닌 delete[] 로 삭제된다.
//지워지면 안되는 포인터 클래스 객체, 다른 관리자에게 위임 되거나 하는 경우
pCA p4(new CA(), DontDelete());
return 0;
}
typedef std::tr1::shared_ptr<CA> pCA;
typedef std::tr1::shared_ptr<char> pChar;
class CA
{
private:
int m_int;
public:
CA():m_int(0) { printf("CA()\n"); }
CA(const CA& a):m_int(a.m_int) { printf("CA(const CA& a)\n"); }
~CA(){printf("~CA()\n");}
pCA GetThis() { return pCA(this); }
int GetInt() { return m_int; }
};
struct DeletArray
{
template<typename T>
void operator()(T* t)
{
printf("DeleteArray is called\n");
delete [] t;
}
};
struct DontDelete
{
template<typename T>
void operator()(T* t) {printf("DontDelete is called\n");}
};
int _tmain(int argc, _TCHAR* argv[])
{
//단순한 포인터 클래스 객체
pCA p1(new CA());
pCA p2(new CA(*p1));
//복사도 잘되고 잘 지워짐
//배열형태의 포인터
pChar p3(new char[10], DeletArray());
//DeletArray()로 삭제처리를 설정해 delete 가 아닌 delete[] 로 삭제된다.
//지워지면 안되는 포인터 클래스 객체, 다른 관리자에게 위임 되거나 하는 경우
pCA p4(new CA(), DontDelete());
return 0;
}
댓글 없음:
댓글 쓰기