簡體   English   中英

在成員函數中刪除對容器的引用

[英]delete reference to a container in member function

我有class A ,然后做了class A的向量; std::vector<A> b ,我正確初始化了它。

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

在這個類中,我還有一個成員函數,並且在該成員函數內部。 我首先建立對類A的向量的引用,並使用指針的引用對其進行初始化,原因是成員引用只能分配一次值,因此我使用了指針,但是在成員函數內部,引用的語法為更干凈。

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

謝謝

當引用超出范圍時,它不會破壞原始對象。

我認為情況就是這樣:

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();
}

您應該提供一個示例,但是使用您提供的示例,已經不是很大!

如果存儲std::vector<A> ,則存儲的是類型A的實際對象。當向量增長時,這些項目將被復制到新的內存位置,因此在對象向量內部保留指向項目的指針或引用不能按預期工作。

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

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

暫無
暫無

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

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