[Issue 4651] New: Docs: Returned classes that have access to stack variables of its enclosing function

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun Aug 15 19:23:29 PDT 2010


http://d.puremagic.com/issues/show_bug.cgi?id=4651

           Summary: Docs: Returned classes that have access to stack
                    variables of its enclosing function
           Product: D
           Version: D2
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: www.digitalmars.com
        AssignedTo: nobody at puremagic.com
        ReportedBy: andrej.mitrovich at gmail.com


--- Comment #0 from Andrej Mitrovic <andrej.mitrovich at gmail.com> 2010-08-15 19:23:25 PDT ---
This is an outdated statement:

"While a non-static nested class can access the stack variables of its
enclosing function, that access becomes invalid once the enclosing function
exits: 

class Base
{
    int foo() { return 1; }
}

Base func()
{   int m = 3;

    class Nested : Base
    {
    int foo() { return m; }
    }

    Base b = new Nested;

    assert(b.foo() == 3);    // Ok, func() is still active
    return b;
}

int test()
{
    Base b = func();
    return b.foo();        // Error, func().m is undefined
}
"

As is stated in TDPL, variables in the local function get allocated on the heap
if DMD detects that a returning class needs access to it. This section needs to
be updated.

The next section with the code example for a workaround can be removed:

"If this kind of functionality is needed, the way to make it work is to make
copies of the needed variables within the nested class's constructor"

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list