2011-07-29 36 views
2

在一個out-proc COM服務器中,我需要一個類工廠,我將傳遞給CoRegisterClassObject()CreateInstance()將僅使用new來創建對象實例並且不需要存儲數據。 LockServer()將修改不是特定於工廠實例的共享鎖計數器。使用全局對象作爲COM類工廠合法嗎?

所以事實上,我不需要在工廠內存儲任何不同的數據,只有一個對象將會很好。另外我不想照顧那個物體的壽命。這就是爲什麼我很想工廠聲明爲一個全局變量(含引用計數設置爲1構造函數):

//Server.cpp 
CMyFactory factory; 

一旦我這樣做,我不再滿足於delete thisRelease() - 該代碼應從不在正常條件下運行(引用計數從1開始,從不到零),如果運行,則會導致未定義的行爲。所以我覺得從工廠取出裁判計數器和實施AddRef()Release()這樣的:

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

所以引用計數只會有沒有副作用,沒有delete this

描述的實施是否合法?會導致任何問題嗎?

回答

1

只要您以不同的方式控制過程生命週期,就可以接受。在這種情況下刪除它是災難性的,因爲對象是全局的而不是動態的。

1

是的,這是完全合法的,甚至記錄在COM書籍的某處。