On Sunday, 9 April 2017 at 20:15:46 UTC, Walter Bright wrote:
On 4/9/2017 1:35 AM, Dukc wrote:
object aMemoryLeak;
void someFunc()
{ throw (aMemoryLeak = new Exception("hello world!"));
}
Would the compiler warn about this or make the exception
normally garbage
collected?
That would be a regular gc allocated Exception.
Iternally, would we create a temp Exception with _refcount = 2,
and then on assignment to 'aMemoryLeak', change the refcount to 0?
I understand that the compiler would probably optimize that away
in this case, but it seems that's a general answer that would
work.
So in that case:
1. Do you really need the "_refcount=1" state as currently
defined? I'd think the only code which sees this state, has just
decremented it from 2 and is about to delete it.
2. Echoing others here: This seems like a general model D could
use, where you have refcounted objects, but at any time, a gc
reference could be taken, which is indicated by setting the
refcount to 0 but leaving the object alive. Is it general? If
not, what is special about Exceptions that makes it work here?