[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