В COM-сервере out-proc мне нужна фабрика классов, которую я передам CoRegisterClassObject()
. CreateInstance()
будет использовать только new
для создания экземпляров объекта и не нуждается в сохраненных данных. LockServer()
изменит счетчик общей блокировки, не относящийся к заводскому экземпляру.
Так что на самом деле мне не нужно хранить какие-либо особые данные внутри фабрики, и только один объект подойдет. Также я не хочу заботиться о жизни этого объекта. Вот почему я испытываю желание объявить фабрику как глобальную переменную (в конструкторе для refcount установлено значение 1):
//Server.cpp
CMyFactory factory;
Как только я это сделаю, я больше не удовлетворен delete this
внутри Release()
- этот код никогда не должен запускаться при нормальных условиях (refcount начинается с 1 и никогда не достигает нуля), и если он выполняется, это приводит к неопределенному поведению. Поэтому я думаю об удалении счетчика ссылок с завода и реализации AddRef()
и Release()
следующим образом:
ULONG CMyFactory::AddRef()
{
return 1;
}
ULONG CMyFactory::Release()
{
return 1;
}
Так что подсчет ссылок не будет иметь никаких побочных эффектов, delete this
.
Будет ли описанная реализация законной? Это вызовет проблемы?