| |||||||||||||||||
| |||||||||||||||||
|
正文: | ||
学COM技术也有一段时间了,总觉得COM中的有些概念比较难,比如说对象这个概念就与C++中的对象概念大有不同,现简单剖析如下,供初学者参考。 C++中我们使用class这个关键字来定义类,也就是生成了一个用户自定义类型。成员数据和成员函数可以是private,protected以及public,而且C++类可以继承另一个类和被另一个类继承,它可获取基类的所有特性(数据和成员函数),并具有超越和扩展基类选择项的能力。而Windows对象是通过其所支持的接口的形式来定义的。所有Windows对象必须支持一个称为IUnknown的接口。一个对象只有支持此接口才能称之为Windows对象,对象用户通过IUnknown的成员函数了得知对象所支持的其它接口。 对象的引用 C++对象可以通过对象变量,对象引用(C++中一个特定类型),或指向的指针被引用。由于对象通常是在本地的(在用户的EXE或DLL中),其实例可存在与进程空间的任何地方。通过任何变量,在用户和对象是朋友的情况下,用户具有对对象中任何公共的、专有的或被保护的成员的访问权。但是Windows对象通常通过一接口指针而不是对象本身的指针被引用的。这意味着通过一个已有的接口指针,用户只能访问在该接口中的成员函数。用户永远不能得到一个指向完整对象的指针(因为没有关于完整对象的定义),因此不存在对数据员的访问权,也不存在"友员"的概念。 在C++中,可通过在一个对象指针上调用delete删除操作来消除通过new创建的对象。以堆栈变量出现的对象只要在从一个函数返回前重置堆栈即可被自动释放。上述两种情况中,对象所占用的存储器均被释放,对象的析构函数即被调用了。 |