devxlogo

Uses of an anonymous union

Uses of an anonymous union

Unions are used to minimize memory waste. For example, consider the following database-transaction class used to update a person’s data. The key can be either a unique ID number or a person’s last name, but never both at once:

 class UpdateDetails {	private:	enum keytype{ keystring, keyID} key;	char *name;	long ID;	//...	UpdateDetails(const char *n): key(keystring),						n (new char [strlen)n) +1]	 					{strcpy(name,n);} 	UpdatePersonalDetails(long id) : ID(id), key(keyID) {}};

Clearly, memory is wasted here since only one of the keys can be used in each transaction. An anonymous union (for instance, an embedded union having neither a tag-name nor an instance name) can be used in this case to avoid memory waste:

 class UpdateDetails {	enum keytype{ keystring, keyID} key;	union {  //anonymous union: 1. has no tag name,		char *name;		long ID };    // 2. and no instance name.public:UpdateDetails(const char *n) : key (keystring), 						 n (new char [strlen(n) +1] 						{strcpy(name, n);} 	UpdateDetails(long id) : ID(id), key(keyID) {};	//...};

The advantage over an ordinary union is that in this case, the members of an anonymous union are accessed directly:

 void  UpdateDetails::GetID() const {   if (key == keyID)    return ID;//anonymous union member, accessed like ordinary member  return 0L;  //indicate string key is used }
devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist