我想用TComInterface替换原始指针。
我目前的代码是:
{
TComInterface<IStoreNamespace> pStore;
if (SUCCEEDED(CoCreateInstance(CLSID_StoreNamespace, NULL, CLSCTX_INPROC_SERVER, IID_IStoreNamespace, (LPVOID*)&pStore)))
{
if (SUCCEEDED(pStore->Initialize(Form1->Handle, 1)))
{
//pStore->CallOtherMethods...
}
}
// Release()'d automatically?
}
如果我理解正确,这会用新指针覆盖pStore指针,因此它不会使用pStore->Release();
从最后一个实例自动调用pStore
。
在Release()
调用的条件下?我相信它可能是变量超出范围的时候,即使我像这样初始化它。在上面的例子中初始化pStore的正确方法是什么,所以它不仅覆盖指针而且还首先调用Release()
?
答案 0 :(得分:1)
TComInterface
超出范围并被破坏时, Release()
会在其内部接口上调用TComInterface
。如果您希望尽快手动TComInterface::Unbind()
界面,也可以调用Release()
方法。如果您通过TComInterface
赋值运算符分配新的接口指针(或其他Release()
实例),TComInterface
也会在其当前接口上调用=
。
TComInterface
会覆盖&
运算符以返回指向其内部接口的指针,因此在调用{{1}之前,必须确保TComInterface
没有保持活动接口(或将新接口复制到CoCreateInstance()
中的任何其他内容),否则预览界面将被泄露而不会被释放。 TComInterface
的默认构造函数将内部接口设置为NULL,因此您通常不必担心,除非您多次重复使用相同的TComInterface
变量,例如使用接口枚举器时在循环中。