不透明指针

编辑
本词条由“匿名用户” 建档。

在计算机编程中,不透明指针是不透明数据类型的特例,一种声明为指向某个未指定类型的记录或数据结构的指针的数据类型。 不透明指针存在于多种编程语言中,包括Ada、C、C++、D和Modula-2。 如果语言是强类型的,没有关于不透明指针类型T的其他信息的程序和过程仍然可以声明类型T的变量、数组和记录字段,分配该类型的值,并比较这些值是否相等。但是,他们将无法解除对此类指针的引用,只能通过调用一些缺少信...

目录

不透明指针

编辑

计算机编程中,透明指针是不透明数据类型的特例,一种声明为指向某个未指定类型的记录或数据结构的指针的数据类型。

不透明指针存在于多种编程语言中,包括 Ada、C、C++、D 和 Modula-2。

如果语言是强类型的,没有关于不透明指针类型 T 的其他信息的程序和过程仍然可以声明类型 T 的变量、数组和记录字段,分配该类型的值,并比较这些值是否相等。 但是,他们将无法解除对此类指针的引用,只能通过调用一些缺少信息的过程来更改对象的内容。

不透明指针是一种向普通客户端隐藏接口实现细节的方法,因此可以更改实现而无需重新编译使用它的模块。 这也有利于程序员,因为可以创建一个简单的界面,并且大多数细节可以隐藏在另一个文件中。 例如,这对于通过共享库的不同版本提供二进制代码兼容性很重要。

这种技术设计模式中被描述为桥接模式。 它有时被称为句柄类、Pimpl 惯用语(用于指向实现惯用语的指针)、编译器防火墙惯用语、d 指针或 Cheshire Cat,尤其是在 C++ 社区中。

例子

编辑

阿达

package Library_Interface 是类型 Handle 是有限私有的; -- 操作...私有类型 Hidden_Implementation; -- 在包体中定义类型Handle是access Hidden_Implementation;end Library_Interface;

类型 Handle 是指向实际实现的不透明指针,未在规范中定义。 请注意,该类型不仅是私有的(禁止客户端直接访问该类型,只能通过操作访问),而且是有限的(以避免数据结构的副本,从而防止悬空引用)。

package body Library_Interface is type Hidden_Implementation is record ... -- 实际实现可以是任何结束记录; -- 操作的定义...end Library_Interface;

这些类型有时称为 Taft 类型——以 Ada 95 的主要设计者 Tucker Taft 的名字命名——因为它们是在所谓的 Ada 83 的 Taft 修正案中引入的。

此示例演示了一种使用 C 语言实现面向对象编程的信息隐藏(封装)方面的方法。 如果有人想改变 struct obj 的定义,除非 API 也被改变,否则没有必要重新编译程序中使用 obj.h 头文件的任何其他模块。 请注意,函数可能需要检查传递的指针是否为 NULL,但为简洁起见,上面省略了此类检查。

 

不透明指针

d 指针模式是不透明指针的一种实现。 由于其优点(如下所述),它常用于 C++ 类中。 d 指针是指向结构实例的类的私有数据成员。 此方法允许类声明省略私有数据成员,d 指针本身除外。 因此,

  • 隐藏了更多的类实现
  • 向私有结构添加新的数据成员不会影响二进制兼容性

内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/195598/

(4)
词条目录
  1. 不透明指针
  2. 例子
  3. 阿达

轻触这里

关闭目录

目录