2012-11-13 46 views
0

我有class A,然後我做了一個向量class A; std::vector<A> b,我正確地初始化它。刪除成員函數中的容器的引用

我有另一個類的成員函數,它有一個指向A的 向量的成員指針;

在這個類中,我也有一個成員函數,並且在這個成員函數裏面。我的拳頭建立了對A類向量的引用,並且使用指針的引用來初始化它,原因是成員引用只能賦值一次,所以我使用指針,但是在成員函數裏面,引用的語法更乾淨。

問題是,在成員函數中,如果我刪除對該向量的引用,是否只刪除引用或刪除整個容器的指針指向。該容器包含的對象不是指針。

感謝

+0

您正在混合引用和指針。請提供一個代碼或更清晰的說明。您無法刪除參考,這在技術上不可行。 –

+0

http://sscce.org –

回答

1

當參考超出範圍,它不會破壞原來的對象。

我想這是這種情況:

class A {}; 

class B 
{ 
    std::vector<A>* pA; 

public: 
    B(std::vector<A>* p): pA(p) {} 

    void foo() 
    { 
      std::vector<A>& arr = *pA; 
      //do stuff with arr 
      // Arr and pA are still valid after the end of this function 
    } 
}; 

int main() 
{ 
    std::vector<A> Arr; 
    Arr.push_back(A()); 

    B b(&Arr); 
    b.foo(); 
} 
+0

如果它是綁定到臨時它確實,但可能不是這種情況。 –

+0

@Let_Me_Be當然你是對的。 – Alex

+0

謝謝,這不是一個臨時的。 – emailhy

0

你應該提供一個例子,但你提供什麼,這已經是一個很大的不,不!

如果存儲std::vector<A>你存儲類型A的實際對象當你的載體增長,項目將複製到一個新的存儲位置,因此讓指針或引用的項目贏得了對象的矢量內不像你期望的那樣工作。

考慮存儲指針代替(std::vector<A*>

刪除您的指針std::vector<A>應該刪除所有內容。如果切換到std::vector<A*>,則應刪除矢量中的每個對象,然後刪除該矢量。

相關問題