[Issue 16388] New: Throwing constructors must destroy fully constructed fields
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Sun Aug 14 06:34:18 PDT 2016
https://issues.dlang.org/show_bug.cgi?id=16388
Issue ID: 16388
Summary: Throwing constructors must destroy fully constructed
fields
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: enhancement
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: andrei at erdani.com
Per
http://www.digitalmars.com/d/archives/digitalmars/D/What_is_going_on_here_257862.html,
if the constructor of an object constructs a field and then throws an
exception, the field's destructor is not called.
import std.stdio;
struct A {
int a = 3;
this( int var ) {
a += var;
}
~this() {
writeln("A down ", a);
}
}
struct B {
A a;
this( int var ) {
a = A(var+1);
throw new Exception("An exception");
}
}
void main()
{
try {
auto b = B(2);
} catch( Exception ex ) {
}
}
The code must print "A down".
--
More information about the Digitalmars-d-bugs
mailing list