关于COM中智能指针的一些建议.

原创 2002年08月17日 10:12:00

在使用ATL中所带智能指针CComPtr和CComQIPtr时要小心。
以下代码假设存在一个组件TESTCOMPtr,其组件的CLSID为CLSID_TESTCOMPtr,
向客户曝露一个接口ITestCOMPtr。
int main()
{
    HRESULT l_hr;
    CoInitialize(NULL);
    CComPtr <ITestCOMPtr> l_spTestCOMPtr;
    l_hr = l_spTestCOMPtr.CreateInstance(CLSID_ TESTCOMPtr);
    if(FAILED(l_hr))
    {
        return l_hr;
    }
    //dosomething of  ITestCOMPtr
    CoUninitialize();
}
初看这段代码是没有任何问题的,但是运行还是会崩溃。如果我们在
CoInitialize(NULL);下行加上"{"和CoUninitialize();上行加上"}"就不会出错了。为什么呢?
原因在于原来的CoInitialize所开的套间在CoUninitialize();后已经被关闭。
而智能指针的组件对象却并没有释放,直到程序调用CComPtr<ITestCOMPtr>的析构函数时才调用
ITestCOMPtr的Release方法,但是这时候,套间已经不在了,所以导致了程序的崩溃。在组件
的生命周期很短的时候,智能指针的使用基本是无害的,并且有时是非常方便的。

所以在使用智能指针时有以下建议:
1. 当对象的生命周期很长要小心使用。
2. 当对象的生命周期不确定时不要使用。
3. 千万不要使用全局的智能指针。

c++11智能指针解析——揭开底层面纱,完整理解智能指针

昨天跟同事小小的研究了下关于不同平台下,起因是遇到了一个坑,vs上没有问题,在安卓上却崩溃了。找了半天后发现是c++字节补齐问题,期间包括使用#pragma pack(1)来限定字节对齐方式等各种条件...
  • zy19940906
  • zy19940906
  • 2016年01月07日 17:00
  • 9255

C++四种智能指针小结

C++四种智能指针auto_ptr、scope_ptr、shared_ptr和weak_ptr. 其中auto_ptr是C++98标准化引入的;scope_ptr、shared_ptr和weak_p...
  • e5Max
  • e5Max
  • 2016年01月23日 12:33
  • 2790

Android系统篇之----Android中的智能指针

一、前言今天我们开启Android系统篇的文章了,其实一直想弄,只是之前一直没有太多深入的了解,最近又把这块拿出来好好看了一下,所以想从新梳理一下,来看看Android中的这块知识,首先我们今天来看一...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2016年05月03日 17:27
  • 9637

C++11新特性之智能指针

这一节将从用法上、内存存储上以及生存周期上,对unique_ptr, shared_ptr和weak_ptr做一个深入剖析。unique_ptr   不共享它的指针。它无法复制到其他 unique...
  • u013184159
  • u013184159
  • 2016年04月18日 10:57
  • 6388

C++为什么要用智能指针

首先要理解什么是智能指针。  先来看普通指针,int *p = new int; 这个p 是一个普通指针,指向一个内存块,内存块中存放一个整形数值。 而智能指针是在普通指针的基础上,加上一个引用计...
  • snail_hunan
  • snail_hunan
  • 2015年01月24日 16:22
  • 826

c++11智能指针解析——揭开底层面纱,完整理解智能指针

http://blog.csdn.net/zy19940906/article/details/50470087  本次讨论:c++11之前的auto_ptr; c++11新加的unique_p...
  • gettogetto
  • gettogetto
  • 2017年03月27日 09:52
  • 343

c++ 复制控制和智能指针实现

总结了c++中三种复制控制的场合和具体实现方法,在此基础上设计自己的智能指针类。...
  • wenzhou1219
  • wenzhou1219
  • 2016年06月04日 21:02
  • 1351

四种智能指针的用法和原理

智能指针共分为4种,即boost库中的auto_ptr、scoped_ptr、shared_ptr、weak_ptr。   智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时...
  • sinat_36118270
  • sinat_36118270
  • 2017年04月04日 13:06
  • 860

C++面试题(四)——智能指针的原理和实现

普通C++面试时候的一般都是这个套路:      1,C++和C相比最大的特点——面向对象:封装,继承,多态。      2,你知道虚函数吗?——实现多态所必须,父类类型的指针指向子类的实例,执行的时...
  • worldwindjp
  • worldwindjp
  • 2014年01月28日 17:00
  • 11619

stl智能指针和boost智能指针对比

先说说stl中的智能指针auto_ptr,先说说auto_ptr的特点。std::auto_ptr用来管理单个堆内存对象,但是独享所有权,且不允许赋值和拷贝(没有重载operator=),所以如果在函...
  • zhangqi_gsts
  • zhangqi_gsts
  • 2015年12月14日 20:15
  • 1198
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于COM中智能指针的一些建议.
举报原因:
原因补充:

(最多只允许输入30个字)