ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

基于所有权的资源管理--构造

2022-03-29 15:03:05  阅读:178  来源: 互联网

标签:Copy -- 隐式 let new 所有权 资源管理 Rust 构造函数


构造

构造一个用户定义类型的实例只有一种方法:为其命名,并一次性初始化其所有字段:

 

struct Foo {
    a: u8,
    b: u32,
    c: bool,
}

enum Bar {
    X(u32),
    Y(bool),
}

struct Unit;

let foo = Foo { a: 0, b: 1, c: false };
let bar = Bar::X(0);
let empty = Unit;

就这样。其他所有构造类型实例的方法都是在调用一个完全虚无的函数,这个函数做了一些事情,最后变成了唯一的真实构造函数。

与 C++ 不同,Rust 没有内置的各种构造函数。没有 Copy、Default、Assignment、Move 或其他构造函数。其原因是多方面的,但主要归结为 Rust 的显式哲学。

移动构造函数在 Rust 中是没有意义的,因为我们不允许类型“关心”它们在内存中的位置。每个类型都必须准备好被盲目地移动到内存中的其他地方。这意味着纯粹的栈上但仍可移动的侵入性链表在 Rust 中根本无法(安全地)实现。

赋值和复制构造函数也同样不存在,因为移动语义是 Rust 中唯一的语义。x = y最多只是把 y 的位移到 x 变量中。Rust 确实提供了两种方法来提供 C++ 的面向拷贝的语义:CopyClone。Clone 类似我们所说的复制构造函数,但它从未被隐式调用。你必须在你想要克隆的元素上明确地调用clone。Copy 是 Clone 的一个特例,它的实现只是“复制比特”。Copy 类型隐式克隆的,只要它们被移动;但由于 Copy 的定义,这只是意味着不把旧的变量当作未初始化的 —— 也就是说,啥都没干(no-op)。

虽然 Rust 提供了一个Default特性来指定了一个类似默认构造函数的东西,但这个特性很少被使用。这是因为变量不是隐式初始化的。 Default 基本上只对通用编程有用。在具体环境中,一个类型将为任何类型的“默认”构造函数提供一个静态的new方法。这与其他语言中的new没有关系,也没有特殊含义。它只是一个命名惯例。

TODO: talk about "placement new"?

标签:Copy,--,隐式,let,new,所有权,资源管理,Rust,构造函数
来源: https://www.cnblogs.com/horysk/p/16071784.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有