Rust生存期和调用成员函数

昂杰夫

我有一个关于Rust编程语言中varable的生存期的问题。

createTest函数创建并返回r值参考。当它返回引用时,testValue被销毁。但是test.print()不会导致崩溃。为什么?

(Test :: print函数是否称为静态函数?)

struct Test;                                                         
impl Drop for Test {                                                       
  fn drop (&mut self) {                                                    
    println("Dropped.");                                                   
  }                                                                        
}                                                                          

impl Test {                                                                
  fn print(&self) { println!("Print!"); }                                  
}                                                                          

fn createTest() -> &Test {                                                 
  let testValue = &Test;                                                   
  return testValue;                                                        
}                                                                          

fn main() {                                                                
  let test = createTest();                                             
  test.print();                                                            
  println("Test");                                                         
}

结果

Dropped.
Print!
Test
休恩

代码编译的原因是因为使用单位结构(即没有字段)基本上等效于:

 struct Test;

 static TestStatic: Test = Test;

 fn createTest() -> &Test {
      &TestStatic
 }

因此&TestStatic表达式具有type &'static Test每个生命周期都是的子生命周期'static,包括的隐式匿名生命周期-> &Test,因此您可以'static在其位置返回a

此行为包含两个错误:


就是说,这样运行非常奇怪Drop,因此感谢您提交11681

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rust生存期和调用成员函数

来自分类Dev

异步函数调用的参数生存期

来自分类Dev

std :: function到对象的成员函数和对象的生存期

来自分类Dev

泛型函数中的Rust生存期问题

来自分类Dev

使用mpsc :: Sender <T <'a >>和线程的Rust生存期

来自分类Dev

字符串转换的Rust,FFI和生存期

来自分类Dev

将变量传递给函数和生存期

来自分类Dev

Rust字符串生存期和迭代器适配器(生存期编译错误)

来自分类Dev

ViewModel,消息和生存期

来自分类Dev

ViewModel,消息和生存期

来自分类Dev

为什么函数参数的生存期与函数内部绑定的生存期不同?

来自分类Dev

在Rust中正确设置生存期和可变性期望

来自分类Dev

在Rust中正确设置生存期和可变性期望

来自分类Dev

无需调用析构函数即可结束STL容器的生存期

来自分类Dev

调用返回引用的函数时了解非词汇生存期

来自分类Dev

如何使用结构和impl的生存期为实现推断合适的生存期?

来自分类Dev

Rust与特征对象生存期的混淆错误

来自分类Dev

Rust指定局部变量的生存期

来自分类Dev

调用AWS Cognito GetCredentialsForIdentity时指定sessionToken生存期

来自分类Dev

构造函数注入Autofac的InstancePerDependency的生存期

来自分类Dev

将生存期参数限制为函数参数的范围

来自分类Dev

如何使用impl函数声明枚举生存期?

来自分类Dev

从`String`中获取`&'a str`的生存期比当前函数更长

来自分类Dev

函数内部局部变量的生存期如何延长?

来自分类Dev

从函数返回的迭代器的生存期要求冲突

来自分类Dev

构造函数注入Autofac的InstancePerDependency的生存期

来自分类Dev

C中局部变量的范围和生存期

来自分类Dev

分层注入器和依赖生存期

来自分类Dev

自定义属性对象的生存期和隔离

Related 相关文章

  1. 1

    Rust生存期和调用成员函数

  2. 2

    异步函数调用的参数生存期

  3. 3

    std :: function到对象的成员函数和对象的生存期

  4. 4

    泛型函数中的Rust生存期问题

  5. 5

    使用mpsc :: Sender <T <'a >>和线程的Rust生存期

  6. 6

    字符串转换的Rust,FFI和生存期

  7. 7

    将变量传递给函数和生存期

  8. 8

    Rust字符串生存期和迭代器适配器(生存期编译错误)

  9. 9

    ViewModel,消息和生存期

  10. 10

    ViewModel,消息和生存期

  11. 11

    为什么函数参数的生存期与函数内部绑定的生存期不同?

  12. 12

    在Rust中正确设置生存期和可变性期望

  13. 13

    在Rust中正确设置生存期和可变性期望

  14. 14

    无需调用析构函数即可结束STL容器的生存期

  15. 15

    调用返回引用的函数时了解非词汇生存期

  16. 16

    如何使用结构和impl的生存期为实现推断合适的生存期?

  17. 17

    Rust与特征对象生存期的混淆错误

  18. 18

    Rust指定局部变量的生存期

  19. 19

    调用AWS Cognito GetCredentialsForIdentity时指定sessionToken生存期

  20. 20

    构造函数注入Autofac的InstancePerDependency的生存期

  21. 21

    将生存期参数限制为函数参数的范围

  22. 22

    如何使用impl函数声明枚举生存期?

  23. 23

    从`String`中获取`&'a str`的生存期比当前函数更长

  24. 24

    函数内部局部变量的生存期如何延长?

  25. 25

    从函数返回的迭代器的生存期要求冲突

  26. 26

    构造函数注入Autofac的InstancePerDependency的生存期

  27. 27

    C中局部变量的范围和生存期

  28. 28

    分层注入器和依赖生存期

  29. 29

    自定义属性对象的生存期和隔离

热门标签

归档