0

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

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

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

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

谢谢

4

2 回答 2

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();
}
于 2012-11-13T17:21:12.133 回答
0

您应该提供一个示例,但根据您提供的内容,这已经是一个很大的禁忌!

如果您存储 astd::vector<A>您将存储 A 类型的实际对象。当您的向量增长时,这些项目将被复制到一个新的内存位置,因此在对象向量中保留对项目的指针或引用将无法按预期工作。

考虑改为存储指针 ( std::vector<A*>)

删除指向 a 的指针std::vector<A>应该会删除所有内容。如果你切换到std::vector<A*>你应该删除向量中的每个对象,然后删除向量。

于 2012-11-13T17:21:30.067 回答