#include <iostream>
using namespace std;
struct MyClass {
int n;
int bar( ) const { return n; }
} ;
int foo( MyClass const * aPtr = 0 ) {
MyClass const & a = aPtr ? * aPtr : MyClass( ) ; // Either bind to *aPtr, or to a default-constructed MyClass
cout << "a refers to " << ( void * ) & a<< " " ;
return a.bar ( ) ;
}
int main( ) {
MyClass mya;
cout << "With nullptr: " ;
foo( ) ;
cout << endl<< "With object " << ( void * ) & mya<< ": " ;
foo( & mya) ;
cout << "\n If the object pointer and the referred pointer are different, a is not bount to the original object\n " ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOyAKCnN0cnVjdCBNeUNsYXNzIHsKCWludCBuOwoJaW50IGJhcigpIGNvbnN0IHsgcmV0dXJuIG47IH0KfTsgIAoKaW50IGZvbyhNeUNsYXNzIGNvbnN0KiBhUHRyID0gMCkgewogICAgTXlDbGFzcyBjb25zdCYgYSA9IGFQdHIgPyAqYVB0ciA6IE15Q2xhc3MoKTsgLy8gRWl0aGVyIGJpbmQgdG8gKmFQdHIsIG9yIHRvIGEgZGVmYXVsdC1jb25zdHJ1Y3RlZCBNeUNsYXNzCiAgICBjb3V0IDw8ICJhIHJlZmVycyB0byAiPDwgKHZvaWQqKSZhPDwiICI7CiAgICByZXR1cm4gYS5iYXIoKTsKfQoKaW50IG1haW4oKSB7CglNeUNsYXNzIG15YTsgCgljb3V0IDw8ICJXaXRoIG51bGxwdHI6ICI7IAoJZm9vKCk7Cgljb3V0IDw8ZW5kbDw8IldpdGggb2JqZWN0ICIgPDwgKHZvaWQqKSZteWE8PCI6ICI7Cglmb28oJm15YSk7CiAgICBjb3V0IDw8ICJcbklmIHRoZSBvYmplY3QgcG9pbnRlciBhbmQgdGhlIHJlZmVycmVkIHBvaW50ZXIgYXJlIGRpZmZlcmVudCwgYSBpcyBub3QgYm91bnQgdG8gdGhlIG9yaWdpbmFsIG9iamVjdFxuIjsKfQo=