[Issue 1228] New: Class invariants should not be called before the object is fully constructed
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri May 11 11:04:30 PDT 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1228
Summary: Class invariants should not be called before the object
is fully constructed
Product: D
Version: 1.014
Platform: Other
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: bugzilla at digitalmars.com
ReportedBy: onlystupidspamhere at yahoo.se
The spec should state whether invariants hold only after the constructor has
finished or not. http://www.webber-labs.com/research/paste01.ps contains some
discussion about class invariants in Java, and might be helpful.
The following code shows how D currently checks invariants even before the
class has been fully constructed. IMO invariants should hold only after the
constructor has finished and there is a valid reference to the object.
Code:
import tango.io.Stdout;
class foo {
this() {
Stdout("entering constructor").newline;
bar();
Stdout("leaving constructor").newline;
}
void bar() {
Stdout("method bar()").newline;
}
invariant {
Stdout("invariant").newline;
}
}
void main() {
auto a = new foo();
}
Output:
entering constructor
invariant
method bar()
invariant
leaving constructor
invariant
--
More information about the Digitalmars-d-bugs
mailing list