Вобщем немного ковыряю по свободе RUST и сталкнулся с идиоцкой проблемой. Не могу избавится от лишнего копирования при создании объектов. Вот пример кода:
struct Foo { val: i32}
impl Foo {
pub fn new() -> Foo {
let o = Foo{val: 123};
print!("Create new Foo: {:p}\n", &o);
return o;
}
fn print(&mut self) {
print!("In foo print {:p} -> {}\n", self, self.val);
}
}
impl Drop for Foo {
fn drop(&mut self) {
print!("Destroy foo {:p}\n", self);
}
}
fn main() {
let mut f = Foo::new();
f.print();
}
Выхлоп:
Create new Foo: 0x7ffff965fa10
In foo print 0x7ffff965fa58 -> 123
Destroy foo 0x7ffff965fa58
Как видно в конструкторе «new» у нас создается локальный объект на стеке, потом он копируется в во второй стековый объект f (внутри main). Вопрос как создавать объекты без лишнего копирования ?