在一个out-proc COM服务器中,我需要一个我将传递给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
。
所描述的实施是否合法?它会引起任何问题吗?
答案 0 :(得分:1)
是的,它完全合法,甚至在COM书籍的某处记录。
答案 1 :(得分:1)
只要您以不同的方式控制流程生命周期,就可以接受。在这种情况下删除它是灾难,因为对象是全局的而不是动态对象。