2011-07-29 4 views
2

out-proc COM 서버에서 나는 CoRegisterClassObject()으로 전달할 클래스 팩토리가 필요합니다. CreateInstance()new을 사용하여 개체 인스턴스를 만들고 저장된 데이터가 필요하지 않습니다. LockServer()은 출고시 인스턴스에 특정한 공유 잠금 카운터를 수정하지 않습니다.글로벌 개체를 COM 클래스 팩토리로 사용하고 있습니까?

그래서 실제로 팩토리에 뚜렷한 데이터를 저장할 필요가 없으며 하나의 객체 만 있으면 괜찮습니다. 또한 객체 수명을 돌보고 싶지도 않습니다. 내가 (생성자에서 1 refcount는 세트) 전역 변수로 공장을 선언 유혹하고 있습니다 이유입니다 :

내가 delete this Release() 내부에 더 이상 만족 해요 그렇게되면
//Server.cpp 
CMyFactory factory; 

- 그 코드해야 (refcount는 1에서 시작하고 결코 0에 도달하지 않습니다.) 실행되지 않으면 정의되지 않은 동작이 발생합니다. 그래서 공장에서 심판 카운터를 제거하고이 같은 AddRef()Release()를 구현하는 생각 :

ULONG CMyFactory::AddRef() 
{ 
    return 1; 
} 
ULONG CMyFactory::Release() 
{ 
    return 1; 
} 

그러니 그냥 아무 부작용이 없습니다 참조 횟수가 더 delete this 없습니다.

설명 된 구현이 합법적일까요? 문제가 발생합니까?

답변

1

공정 수명을 여러 가지 방법으로 조절하는 한 허용됩니다. 이 경우 개체 삭제는 전역 개체가 아니기 때문에이 경우 삭제하십시오.

1

네, 그것은 완벽하게 합법적이며 심지어 COM 어딘가에 문서화되어 있습니다.