簡體   English   中英

如何創建一次性可變引用?

[英]how can I create a throwaway mutable reference?

我試圖包裝一個向量來改變它的索引行為,這樣當發生越界訪問時,它不會恐慌,而是返回對虛擬值的引用,如下所示:

use std::ops::Index;

struct VecWrapper(Vec<()>);

impl Index<usize> for VecWrapper {
    type Output = ();
    fn index(&self, idx: usize) -> &() {
        if idx < self.0.len() {
            &self.0[idx]
        } else {
            &()
        }
    }
}

這對於 Index 的實現來說工作得很好,但是由於顯而易見的原因,嘗試以相同的方式實現 IndexMut 失敗了。 我的集合中的類型沒有 Drop 實現,因此不需要調用析構函數(釋放內存除外)。

我能想到的唯一解決方案是擁有一個包含數千個虛擬對象的 static 可變數組,並分發對該數組元素的引用,這是一個可怕的解決方案,但如果借用的虛擬對象數量超過了大小,它仍然會導致 UB static 數組。

為包裝器提供一個附加字段,即虛擬字段。 它具有相同的生命周期限制,因此不能使用別名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM