#static #lazy-evaluation #drop #shared #arc

weak_static

A macro for declaring lazy droppable statics

2 releases

Uses old Rust 2015

0.1.1 Jun 19, 2017
0.1.0 Jun 17, 2017

#73 in #drop

MIT/Apache

4KB

This crate provides a macro to create a static value that gets created when needed and dropped as soon as its not needed anymore. It requires the lazy_static macro to be imported.

Example

#[macro_use] extern crate lazy_static;
#[macro_use] extern crate weak_static;

struct Foo;

impl Foo {
    fn new() -> Self {
        println!("new");
        Foo
    }
}

impl Drop for Foo {
    fn drop(&mut self) {
        println!("drop");
    }
}

weak_static! {
    static FOO: Foo = Foo::new();
}

fn main() {
    {
        let _foo1 = FOO();
        let _foo2 = FOO();
        let _foo3 = FOO();
    }
    
    {
        let _foo4 = FOO();
        let _foo5 = FOO();
        let _foo6 = FOO();
    }
}

Outputs:

new
drop
new
drop

The new prints corresponds to the FOO() calls of _foo1 and _foo4. The drop prints correspond to the last FOO reference being dropped.

No runtime deps