On 7/13/18 7:22 AM, ketmar wrote:
Piotr Mitana wrote:
This code:
import std.stdio;
class X1 {}
class X2 : X1
{
void run() @safe
{
writeln("DONE");
}
}
void main() @safe
{
X1 x1 = new X1;
X2 x2 = cast(X2) x1;
x2.run();
}
is obviously wrong gets killed by OS's signal. Why is it @safe? I
thought @safe should prevent such errors as well.
there is nothing wrong here. dereferencing null reference is completely
safe (in terms of result predictability).
To emphasize the point, this is @safe as well:
X2 x2; // = null
x2.run();
D does not consider a segmentation fault due to null dereferencing to be
unsafe -- no memory corruption happens.
-Steve