Rust 低效的实例构建?

Rust 低效的实例构建?,rust,Rust,下面是一个简单的struct pub struct Point { x: uint, y: uint } impl Point { pub fn new() -> Point { Point{x: 0u, y: 0u} } } fn main() { let p = box Point::new(); } 我对构造函数如何工作的理解如下。函数的new()。此实例中的数据被浅层复制到由框创建的堆内存中。然后将指向堆内存的指

下面是一个简单的
struct

pub struct Point {
    x: uint,
    y: uint
}

impl Point {
    pub fn new() -> Point {
            Point{x: 0u, y: 0u}
    }
}

fn main() {
    let p = box Point::new();
}
我对构造函数如何工作的理解如下。函数的
new()。此实例中的数据被浅层复制到由
框创建的堆内存中。然后将指向堆内存的指针分配给变量
p

我的理解正确吗?两个独立的内存区域是否初始化以创建一个实例?与C++相比,这似乎是一种初始化实例的低效方式。在这里,我们直接从构造函数写入实例的内存。

< P>从:

您可能会认为这会给我们带来糟糕的性能:返回一个值,然后立即将其装箱?!这不是两个世界中最糟糕的模式吗?生锈比这更聪明。此代码中没有副本。main为框分配足够的空间,将指向该内存的指针作为x传递给foo,然后foo将值直接写入框中

这一点非常重要,值得重复:指针不是用来优化代码返回值的。允许调用方选择如何使用您的输出


虽然本文讨论的是装箱价值,但我相信该机制足够通用,而不是特定于箱子。

仅对@Shepmaster的答案进行一点扩展:

Rust(和LLVM)支持RVO或返回值优化,如果在
这样的上下文中使用返回值,Rust足够聪明,可以生成使用某种out指针的代码,通过将返回值直接写入其使用站点来避免复制<代码>框
是RVO的主要用途之一,但它也可用于其他类型和情况