删除对成员函数中容器的引用

delete reference to a container in member function

本文关键字:引用 成员 函数 删除      更新时间:2023-10-16

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

我有一个另一个类的成员函数,它有一个指向A的向量;

在此类中,我还有一个成员函数,并且在这个成员函数中。我首先构建了一个对类 A 向量的引用,并使用指针的尊重对其进行初始化,原因是成员引用只能赋值一次,所以我使用了指针,但是在成员函数内部,引用的语法更干净。

问题是,在 Member 函数中,如果我删除对该向量的引用,它只会删除引用还是删除指针指向的整个容器。 容器包含对象而不是指针。

谢谢

当引用超出范围时,它不会破坏原始对象。

我假设是这种情况:

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*>则应删除矢量中的每个对象,然后删除矢量。