Re: What should function returning a reference return on failure?
"Alf P. Steinbach" <alfps@start.no> wrote in message
news:4c952hF148g4lU2@individual.net...
* Jim Langston:
I'm sure this has been asked a few times, but I'm still not sure.
If the function returns a reference, it's guaranteeing that if it returns,
the result is a valid reference.
You have the choice of using (1) a reference to some special object
denoting "no object" or "failure", or (2) throwing an exception.
(2) is most clean, most reliable wrt. client code checking, and may help
avoid constructing a large dummy object.
Dang, there's one problem with the try...catch.
try
{
CMap& ThisMap = FindMap( MapNumber );
}
catch ( int )
{
LogError("Could not find map");
}
That ThisMap is only going to exist during the lifetime of the try block.
And I can't create it outside the block because it's a reference and has to
be initialized.
Now this means I'll have to put whole blocks of code inside the try block,
but I don't want to catch errors in a block for all the code, and a lot of
the code should execute anyway even if they can't find the map.
That is, this code won't compile:
int i = 1;
try
{
int& j = i;
}
catch (...)
{
}
std::cout << j << std::endl;