<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
    <title>bigfish的网络博客 - 内存安全</title>
    <subtitle>记录技术和生活</subtitle>
    <link rel="self" type="application/atom+xml" href="https://blog.laofu.online/tags/nei-cun-an-quan/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://blog.laofu.online"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-10-04T12:17:00+08:00</updated>
    <id>https://blog.laofu.online/tags/nei-cun-an-quan/atom.xml</id>
    <entry xml:lang="zh">
        <title>Rust 生命周期：为什么要有它，实际代码里到底怎么用？</title>
        <published>2026-10-04T12:17:00+08:00</published>
        <updated>2026-10-04T12:17:00+08:00</updated>
        
        <author>
          <name>bigfish</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.laofu.online/blog/20261004-1217-rustsheng-ming-zhou-qi/"/>
        <id>https://blog.laofu.online/blog/20261004-1217-rustsheng-ming-zhou-qi/</id>
        
        <summary type="html">&lt;p&gt;第一次看到 Rust 的生命周期标注，很多人都会有一个直接反应：&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-8&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-6&quot;&gt; longest&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt; y&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; str&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt; -&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; str&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-13 z-d-8&quot;&gt;    if&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt; x&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-6&quot;&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &amp;gt;&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt; y&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-6&quot;&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt; x&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;span class=&quot;z-l-13 z-d-8&quot;&gt; else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt; y&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里的 &lt;code&gt;&#39;a&lt;/code&gt; 到底是什么？它是不是在告诉 Rust，让这两个字符串“活久一点”？如果只是为了让引用活得更久，为什么不让程序自动处理？&lt;/p&gt;
&lt;p&gt;这个疑问很正常。生命周期不是一种让变量延长寿命的语法，而是在描述一件事：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这个引用在被使用时，它指向的数据还活着吗？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果答案无法确定，程序就可能拿着一个已经失效的地址继续读写。这种引用叫悬垂引用。Rust 选择在编译阶段把它拦下来，而不是等程序运行后偶尔崩溃。&lt;/p&gt;
&lt;p&gt;真正让人困惑的是：生命周期并不只出现在 &lt;code&gt;fn longest&lt;/code&gt; 这种示例里。切片、结构体、迭代器、集合元素、闭包和线程代码里，都可能遇到它。只是有些场景由 Rust 自动推导了，有些场景必须把关系写出来。&lt;/p&gt;</summary>
        
    </entry>
</feed>
