Skip to main content
A pointer to a data member is a specialized C++ construct that stores the relative offset of a non-static data member within a class layout, rather than an absolute memory address. It acts as a typed offset, requiring an actual object instance of the class to be dereferenced in order to resolve to a concrete memory location and yield a value.

Declaration Syntax

To declare a pointer to a data member, the scope resolution operator :: is combined with the pointer asterisk * to bind the pointer to a specific class type.

Assignment Syntax

Assignment requires the address-of operator & applied to the fully qualified name of the class member. You do not assign it the address of a member from a specific object instance.

Dereferencing Syntax

Because the pointer only holds an offset, it cannot be dereferenced on its own. C++ provides two specific pointer-to-member operators to bind the offset to a base object address:
  1. .* (Pointer-to-member access operator): Used when you have a direct object instance or a reference to an object.
  2. ->* (Pointer-to-member indirect access operator): Used when you have a standard pointer to an object.

Technical Characteristics

  • Strong Typing: A pointer to a data member is strictly typed to both the underlying data type and the class type. A int ClassA::* is fundamentally incompatible with an int ClassB::*, even if both classes have identical memory layouts.
  • Non-Static Limitation: This construct applies exclusively to non-static data members. Static data members exist independently of object instances at fixed memory addresses; therefore, they are pointed to using standard C++ pointers (e.g., int*), not pointers to members.
  • Nullability: Pointers to data members can be initialized or assigned to nullptr. Attempting to dereference a null pointer-to-member results in undefined behavior.
  • Polymorphism and Inheritance: Pointers to data members respect inheritance hierarchies. A pointer to a base class member can be safely applied to a derived class object. However, casting a pointer-to-member from a derived class to a base class requires static_cast and is only safe if the base class actually contains that member.

Complete Mechanics Example

Tired of Poor C++ Skills? Fix That With Deep Grasping!Learn More