Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: C++
Expertise: Beginner
Aug 28, 1998



Building the Right Environment to Support AI, Machine Learning and Deep Learning

Before You Resort to Void *...

Void * can serve as a generic data pointer, yet it suffers from the well-known ailments associated with pointers: it can be NULL or a dangling pointer. Furthermore, it usually has to be cast back to its original type in order to access its data--a dangerous and sometimes costly operation if performed at run time. Luckily, C++ offers higher level mechanisms for genericity that are both safer and more efficient:

1. Templates. Templates are a better choice for generic (type-independent) algorithms and functions. In addition, they are safer since they do not involve pointer manipulations and can be checked at compile time:

template  void  swap ( T f, T s); 
2. Inheritance. If you need a function or an algorithm that can be applied to a family of types, you may use a common base class from which all other related types are derived:
class WindBase { public: virtual void Create()=0; virtual void Destroy() = 0; };
class WindFrame: public WindBase { public: void Create(); void Destroy(); };
class WindView: public WindBase { public: void Create(); void Destroy();}; };
void DestroyWindow(WindBase &anyWindow); //for all objects derived from WindBase
Please note that void* should be used in very low-level operations--for example, manipulating hardware buffers or in system routines such as memset() and malloc().
Danny Kalev
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date