实例构造效率低下?

Raj*_*ajV 2 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();
}
Run Code Online (Sandbox Code Playgroud)

我对构造函数如何工作的理解如下.该new()函数Point在其本地堆栈中创建一个实例并返回它.来自此实例的数据被浅层复制到由其创建的堆内存中box.然后将指向堆内存的指针分配给变量p.

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

She*_*ter 9

相关指南:

您可能认为这给我们带来了糟糕的表现:返回一个值,然后立即将其打包?这种模式不是两个世界中最糟糕的吗?Rust比那更聪明.此代码中没有副本.main为盒子分配足够的空间,将指向该内存的指针传递给foo作为x,然后foo将值直接写入Box.

这很重要,需要重复:指针不是为了优化代码中的返回值.允许调用者选择他们想要使用输出的方式.

虽然这涉及拳击价值,但我相信这种机制足够普遍,而不是特定于盒子.


ree*_*eem 7

只是为了扩展@ Shepmaster的回答:

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