www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Out parameters and the strong exception guarantee

reply Michel Fortin <michel.fortin michelf.com> writes:
The strong exception guarantee guaranties that if an exception is 
thrown, the function will have no side effect. Of course, not all 
function can support this (a file I/O error in the middle of writing 
will have side effects), but often it can and it's generally good 
practice to offer the guaranty whenever possible.
<http://en.wikipedia.org/wiki/Exception_guarantees>

But if one of your function has an 'out' parameter, it's impossible to 
implement the strong guarantee, as illustrated by this trivial example:

	void testOut(out int a) {
		throw new Exception("hello!");
	}

	void main() {
		int a = 2;
		try
			testOut(a);
		finally
			writeln(a);
	}

Prints:

	0
	object.Exception: hello!

This happens because the out parameter gets reset to its default value 
as soon as you enter the function, so you can't throw an exception 
before it has been changed.

So should 'out' be reformed to behave more like a return value? I'm not 
sure. But I think this is something to keep in mind when using out 
parameters.

-- 
Michel Fortin
michel.fortin michelf.com
http://michelf.com/
Jun 08 2010
parent FeepingCreature <default_357-line yahoo.de> writes:
On 08.06.2010 14:28, Michel Fortin wrote:
 The strong exception guarantee guaranties that if an exception is
 thrown, the function will have no side effect.

I think that guarantee is too constraining for too little payoff.
Jun 13 2010