View source code
Display the source code in std/typecons.d from which this page was generated on
github.
Improve this page
Quickly fork, edit online, and submit a pull request for this page.
Requires a signed-in GitHub account. This works well for small changes.
If you'd like to make larger changes you may want to consider using
local clone.
Page wiki
View or edit the community-maintained wiki page associated with this page.
Template std.typecons.scoped
Allocates a class object right inside the current scope,
therefore avoiding the overhead of new. This facility is unsafe;
it is the responsibility of the user to not escape a reference to the
object outside the scope.
Arguments
template scoped(T);
Functions
| Function name | Description |
|---|---|
| scoped |
Note
it's illegal to move a class reference even if you are sure there
are no pointers to it. As such, it is illegal to move a scoped object.
Example
class A
{
int x;
this() {x = 0;}
this(int i){x = i;}
}
// Standard usage
auto a1 = scoped!A();
auto a2 = scoped!A(1);
a1.x = 42;
assert(a1.x == 42);
assert(a2.x == 1);
// Restrictions
static assert(!is(typeof({
auto e1 = a1; // illegal, scoped objects can't be copied
assert([a2][0].x == 42); // ditto
alias ScopedObject = typeof(a1);
auto e2 = ScopedObject(); //Illegal, must be built via scoped!A
auto e3 = ScopedObject(1); //Illegal, must be built via scoped!A
})));
// Use as member variable
struct B
{
typeof(scoped!A()) a; // note the trailing parentheses
}
// Use with alias
alias makeScopedA = scoped!A;
auto a6 = makeScopedA();
auto a7 = makeScopedA();
Authors
Andrei Alexandrescu, Bartosz Milewski, Don Clugston, Shin Fujishiro, Kenji Hara