Login | Register   
RSS Feed
Download our iPhone app
Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: C++
Expertise: All
Apr 16, 1998

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 {
	enum keytype{ keystring, keyID} key;
	char *name;
	long ID;
	UpdateDetails(const char *n): key(keystring),
						n (new char [strlen)n) +1]

	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.
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 
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