Delegates in C# can be either synchronous or asynchronous; C++ function pointers are synchronous unless you write your own multi-threading capability.
A pointer in C/C++ needn't refer to a full-blown object. C had function pointers and no object-oriented language support. Delegates are true function objects.