Andrei Alexandrescu Wrote: > Michel Fortin wrote: > > On 2009-08-08 09:17:28 -0400, Andrei Alexandrescu > > <seewebsiteforem...@erdani.org> said: > > > >> Great description. > >> > >> FWIW, I am trying to convince Walter to not reclaim memory in delete, > >> but instead only call destructors. D continues C++'s mistake of > >> conflating lifetime termination with memory reclamation. > > > > I don't see how this changes anything. Instead of accessing a > > deallocated object, you'll access a finaized but not yet deallocated > > object. In both cases, it's a bug. > > The former case has you using memory that was possibly allocated to an > object of different type. This makes for intractable errors. > > > Wouldn't it be better to have a system to track unique pointers? If you > > knew that no other pointer points to a given object or memory block, you > > can finalize and deallocate it safely. In fact, the current semantics of > > a scope object assume that the programmer will not leave any dangling > > pointers at the end of the scope, so it's already assuming uniqueness, > > just not enforcing it. > > Unique pops in an out as a topic for future directions. It is quite > difficult to make it at the same time correct, inconspicuous, and > useful. We have firmly decided to do away with unique for D2. > > > Andrei
I agree, scope arguments can easily be casted away and live beyond the scope. It's impossible to know if a pointer is unique without scanning the entire heap and pausing all threads to scan their stacks. And adding reference counts to allocations would break the need to have a GC in the first place. The best thing to do is to not use delete when uncertain about the uniqueness of a pointer.