SMARTPTR_TYPEDEF(ICalculator, __uuidof(ICalculator));
ICalculatorPtr spIX(CLSID_MYCOMPONENT);
KG_ASSERT_EXIT(spIX);
spIX->fun();
关于上例中_COM_SMARTPTR_TYPEDEF是什么,我们会在后面有详细介绍,暂且读者可以将其视作一个声明。这样一来除了创建COM组件、必要的断言以及函数调用,不存在冗余的代码。对比一下之前的做法,你是否会觉得我们对智能指针的选择和使用有一定的理由了?
需要补充说明的是,我前面所说的是“智能指针提供类型安全的操作”,而并没有说智能指针是绝对类型安全的。这意味着,在智能指针的使用过程中仍然有可能出现类型安全的问题。进一步的讨论请参考“按照规则而不乱用智能指针”。
——条款13:必须提前释放COM组件时,别妄想智能指针帮你完成
作者“liuchang5的专栏”