Opaque Pointer Article Index for
Opaque
Website Links For
Pointer
 

Information About

Opaque Pointer





EXAMPLES


Opaque pointers are present in Programming Language s like Ada , C / C++ or Modula-2 . For example, the following Ada Code sample declares an opaque pointer:

package Library_Interface '''is'''

type Handle '''is''' '''limited''' '''private''';

-- ''Operations...''

private
type Hidden_Implementation; -- ''Defined in the package body''
type Handle '''is''' '''access''' Hidden_Implementation;
end Library_Interface;

The type Handle is an opaque pointer to the real implementation, that is not defined in the specification. Note that the type is not only private (to forbid the clients from accessing the type directly, and only through the operations), but also limited (to avoid the copy of the data structure, and thus preventing dangling references).

package '''body''' Library_Interface '''is'''

type Hidden_Implementation '''is''' '''record'''
... -- ''The actual implementation can be anything''
end record;

-- ''Definition of the operations...''

end Library_Interface;

This technique is sometimes referred as "handle classes" or "''' Cheshire Cat '''", especially among the C++ community .


class Handle {
private:
struct CheshireCat; // ''Not defined here''
  • smile; // ''Handle''


public:
Handle(); // ''Constructor''
~Handle(); // ''Destructor''
// ''Other operations...''
};

#include "handle.hpp"

struct Handle::CheshireCat {
... // ''The actual implementation can be anything''
};

Handle::Handle() {
smile = new CheshireCat;
}

Handle::~Handle() {
delete smile;
}

One type of opaque pointer commonly used in C++ class declarations is the D-pointer . The d-pointer is the only private data member of the class and points to an instance of a struct defined in the class's implementation file. Developed by Arnt Gulbrandsen of Trolltech , this method allows class declarations to omit private data members, except for the d-pointer itself. The result is that more of the class's implementation is hidden from view and adding new data members to the private struct does not affect binary compatibility. The d-pointer is heavily used in the Qt and KDE libraries.


SEE ALSO




REFERENCES



EXTERNAL LINKS


  Book Ada Programming
  Chapter Tips#Full declaration of a type can be deferred to the unit's body
  Name Taft types