LINUX.ORG.RU

История изменений

Исправление cumvillain, (текущая версия) :

struct Resource {
    foo: u64,
    bar: u64,
}

struct LockedResource(...);

impl LockedResource {
    fn from_resource(res: &Resource) -> LockedResource { ... }
}

impl Drop for LockedResource { ... }

fn foo(b: bool) {
    let res = Resource::new();
    let mut lr = LockedResource::from_resource(&res);
    lr.do_something_with_shared_resource();
}

Ну и как бы все

Исправление cumvillain, :

struct Resource {
    foo: u64,
    bar: u64,
}

struct LockedResource(...);

impl LockedResource {
    fn from_resource(res: &Resource) -> LockedResource { ... }
}

impl Drop for LockedResource { ... }

fn foo(b: bool) {
    let res = Resource::new();
    let mut lr = LockedResource::from_resource(&res);
    lr.do_something_with_shared_resourse();
}

Ну и как бы все

Исправление cumvillain, :

struct Resource {
    foo: u64,
    bar: u64,
}

struct LockedResource(...);

impl LockedResource {
    fn from_resource(res: &Resource) -> LockedResource { ... };
}

impl Drop for LockedResource { ... };

fn foo(b: bool) {
    let res = Resource::new();
    let mut lr = LockedResource::from_resource(&res);
    lr.do_something_with_shared_resourse();
}

Ну и как бы все

Исправление cumvillain, :

struct Resource {
    foo: u64,
    bar: u64,
}

struct LockedResource(...);

impl LockedResource {
    fn from_resource() -> LockedResource { ... };
}

impl Drop for LockedResource { ... };

fn foo(b: bool) {
    let res = Resource::new();
    let mut lr = LockedResource::from_resource(&res);
    lr.do_something_with_shared_resourse();
}

Ну и как бы все

Исходная версия cumvillain, :

struct Resource {
    foo: u64,
    bar: u64,
}

newtype LockedResource(...);

impl LockedResource {
    fn from_resource() -> LockedResource { ... };
}

impl Drop for LockedResource { ... };

fn foo(b: bool) {
    let res = Resource::new();
    let mut lr = LockedResource::from_resource(&res);
    lr.do_something_with_shared_resourse();
}

Ну и как бы все