这是一个简单的 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++相比,这似乎是一种初始化实例的低效方法,我们可以从构造函数直接写入实例的内存.
只是为了扩展@ Shepmaster的回答:
Rust(和LLVM)支持RVO或返回值优化,其中如果在上下文中使用返回值box,则Rust足够智能生成使用某种out指针的代码,通过将返回值直接写入来避免复制它的使用网站.box是RVO的主要用途之一,但它也可用于其他类型和情况.
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |