GSI

스마트 포인터를 사용하고,
템플릿을 연동해서 여러가지 단위전략을 세울수 있다.

// CTest //
class CTest
{
public:
 CTest() {}
 ~CTest() }

public:
 int value;
};
typedef SmartPtr<CTest> CDeleteTestPtr;
typedef vector< CDeleteTestPtr > vObject;

// OpNewCreator //
template <class T>
struct OpNewCreator
{
 static T* Crate()
 {
  return new T;
 }
};

// CTestArray //
template < template <class> class CreatePolicy>
class CTestArray
 : public CreatePolicy< CTest >
 , public vObject
{
public:
 CTestArray()
 {
  vObject::clear();
 }
 ~CTestArray() { }

 // Add라는 함수를 하나 제작해 봤다.
 // OpNewCreator를 사용해서 간접적으로 메모리를 생성한다.
 void Add(int idx)
 {
  CDeleteTestPtr ptr = OpNewCreator<CTest>().Crate();
  ptr->value = idx;
  vObject::push_back( ptr );
 }
};
typedef SmartPtr< CTestArray<OpNewCreator> > CTestArrayPtr;

///// 사용법
CTestArrayPtr ar;
for(int i = 0; i < 10; i++)
{
   ar->Add(i);
}

Posted by gsi
: