if(failed(l_hr)) { return l_hr; } //dosomething of itestcomptr couninitialize(); } 初看这段代码是没有任何问题的,但是运行还是会崩溃.如果我们在 coinitialize(null);下行加上"{"与couninitialize();上行加上"}"就不会出错了.为什么呢? 原因在于原来的coinitialize所开的套间在couninitialize();后已经被关闭. 而智能指针的组件对象却并没有释放,直到程序调用ccomptr<itestcomptr>的析构函数时才调用 itestcomptr的release方法,但是这时候,套间已经不在了,所以导致了程序的崩溃.在组件 的生命周期很短的时候,智能指针的使用基本是无害的,并且有时是非常方便的. 所以在使用智能指针时有以下建议: 1. 当对象的生命周期很长要小心使用. 2. 当对象的生命周期不确定时不要使用. 3. 千万不要使用全局的智能指针.
温馨提示:答案为网友推荐,仅供参考