Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: C++
Expertise: Intermediate
Dec 18, 2007

Potential Problems with Friend Classes and Functions in C++

In C++, it is possible to declare as a friend a class that was not declared anywhere else. This behavior is specified in the C++ Standard (11.4), but it can lead to problems if used incorrectly. For example, suppose your friend class is mistyped, as in the example below:

class Class1 { 
public:
	int x;
};

class Class2 { 
public:
	Class2() {}
	friend class Class11; 
	Class11 *pC;
	// friend void Function11();
	// void (*Function11)();
};
Here, the programmer intended to declare Class1 to be a friend class to Class2, but typed Class11 instead of Class1. The declaration friend class Class11; effectively introduces a new local class. Now it is possible to declare a pointer to this class.

Although the same section of the C++ standard prohibits using an undeclared function as a friend, many compilers allow it. It is therefore possible to un-comment the lines above for Function11 and use Class2 as follows:


	Class2 class2;
	class2.pC = NULL;
	class2.Function11();
This code will compile without errors. The first two lines in the above code will execute fine but the results of the execution of class2.Function11() may vary: It may cause a run-time exception because of an invalid object reference, it may produce a core dump, or it may do nothing at all!

Alexander Ocher
 
Comment and Contribute

 

 

 

 

 


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

 

 

Sitemap