Is array concatenation allowed in the class destructor?

Ali Çehreli acehreli at yahoo.com
Wed Jan 2 10:09:34 PST 2013


This issue has come up on the D.learn forum recently. The following 
program terminates with core.exception.InvalidMemoryOperationError. 
(Tested with dmd 2.061 and 2.060)

string foo()
{
     return "a";
}

class Foo
{
     ~this()
     {
         auto s = foo() ~ "b";
     }
}

void main()
{
     new Foo;
}

My guess is that the destructor is being executed at a point where the 
runtime is not in a state where allocating memory is allowed.

Has the programmer made a mistake? What operations are safe in a class 
destructor? (I think the question is valid for the destructors of 
GC-owned struct objects as well.)

Since the programmer should not be expected to know the implementations 
of every function, the only safe action is to not call any function in a 
destructor at all, as that function may be allocating dynamic memory 
under certain conditions. I hope I am wrong. :) Can we expect the 
runtime be cooperative until all finalizers are executed?

Ali


More information about the Digitalmars-d mailing list