내가 Win32에서 관리를위한 C++ RAII 클래스가에 기능을 추가 :: shared_ptr의 <> 보이는이 같은 비트 :부스트를 사용하여 처리하는 핸들 래퍼
namespace detail {
struct NoDelete { void operator()(void*) {}; };
}; // namespace detail
template< typename HANDLE_TYPE, typename HANDLE_DELETER >
class CHandleT
{
public :
explicit CHandleT(HANDLE_TYPE handle, bool delete_on_release = true)
{
if(delete_on_release)
handle_ = Handle(handle, HANDLE_DELETER());
else
handle_ = Handle(handle, detail::NoDelete());
};
operator HANDLE_TYPE() const { return static_cast<HANDLE_TYPE>(handle_.get()); };
protected:
typedef boost::shared_ptr<void> Handle;
Handle handle_;
}; // class CHandleT
struct DeallocateHandle
{
void operator()(void* handle) { ::CloseHandle(handle); };
};
typedef CHandleT< HANDLE, DeallocateHandle > CHandle;
내가 그것을는 대신 쓰는 것을 확장하고 싶습니다 :
는CHandle my_handle(::CreateEvent(NULL, FALSE, FALSE, NULL));
::SetEvent(my_handle.get());
나는 작성할 수
CEvent my_event(NULL, FALSE, FALSE, NULL);
my_event.SetEvent();
이 가장 좋은 방법은 그 일 할 것인가 t CHandle 클래스를 CEvent 클래스의 멤버로 사용합니까?
class CEvent
{
public:
explicit CEvent(LPSECURITY_ATTRIBUTES lpEventAttributes = NULL,
BOOL bManualReset = TRUE,
BOOL bInitialState = FALSE,
LPCTSTR lpName = NULL,
bool delete_on_release = true) :
handle_(new CHandle(::CreateEvent(lpEventAttributes,
bManualReset,
bInitialState,
lpName),
delete_on_release))
{
};
BOOL SetEvent()
{
_ASSERT(NULL != handle_ && NULL != handle_.get());
return ::SetEvent(handle_.get());
};
private:
boost::shared_ptr<CHandle> handle_;
}; // class CEvent
또는 더 좋은 방법이 있습니까? (난 아직도 부스트에 의해 주어진 CHandle의 복사 의미를 유지하고자합니다 :: shared_ptr을 <>.
감사합니다, PaulH
내가 부스트 :: shared_ptr의 또는 스마트에 대한 논의로받지 않습니다
+1 DuplicateHandle의 경우 –
@ Majk-a-Ra, 상속이 왜 우승합니까? CHandleT를 "scoped_handle"로 사용하고 다형성이 필요하지 않은 경우. 적은 커플 링 옵션이 승자가되어야합니다. –
그것은 인용되었고 당신은 맞는 키워드를 제공합니다 : 구성. 반면 믹스 인은 커플 링이 아닙니다. 중앙에서 핸들 유형을 바꿀 수 있으며 더 많이 할 수 있습니다. 헤더와 템플리트가 커플 링하지 않는 것과 같습니다. 그들의 .cpp를 좋아하는 사람들은 보통 너무 사랑한다. :) Composition-based 기술은 거기에서 가장 과소 평가 된 것 중 하나이지만 기능적인 공간에서는 문제가되지 않는다. OO 사람들은 그 이상에 대해 질문 할 필요가 있습니다. 이유는 없습니다. 알고리즘에서도 확실하지만 어느 것도 유용하지는 않지만 구성은 상속이나 포함하지 않고 다형성을 다루지 않는 기능적 형태로 두드러집니다 .. –