[英]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.