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