Many programming schools recommend that functions have only a single exit point. For example, the following function is considered bad programming practice because it contains three potential exit points:
int comapre_strings(const string & s1, const string & s2)
// lexicographical comparison; like strcmp()
if (s1 == s2) return 0;
if (s1 > s2) return 1;
Although the "single exit" programming idiom has some merits in procedural languages, it's virtually useless in C++. To see why, look at the following function. Ostensibly, it complies with the single exit idiom:
char * pbuff = new char [MAX_SIZE]; // #1
std::string str ("hello"); // #2
return 0; // only one exit?
In practice, func() has three exit points; one of which is an explicit return statement. The other two are implicit exit points: in the statement #1, if operator new fails, it will throw a std::bad_alloc exception. Throwing an exception is an exit point. Similarly, in statement #2, if string's constructor fails, it will also throw an exception. Thus, the single exit point design idiom is pretty irrelevant in non-trivial C++ code. Instead of blindly following obsolete principles, programmers should focus on robust, efficient and functional design.