删除对成员函数中容器的引用
delete reference to a container in member function
我有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*>
则应删除矢量中的每个对象,然后删除矢量。
相关文章:
- 具有引用成员的结构是否具有唯一的对象表示形式
- 初始化右值引用成员
- C++通过绑定到引用成员而缩短临时变量寿命?
- C++为具有引用成员变量的类创建复制构造函数
- 常量和引用成员函数限定符
- C++将引用成员绑定到构造函数参数
- 如果包含引用成员的类中缺少原始变量,为什么它仍然可以访问?
- 初始化指针或引用成员变量以指向另一个成员
- 将常量引用成员设置为临时变量是否安全
- 对象超出范围后,引用成员设置为 0
- 复制构造函数初始化初始化列表中的引用成员会导致指针悬空
- 使用默认构造函数引用成员变量初始化错误
- 如何从派生类访问引用成员变量?
- Visual Studio 2017 允许在构造函数中使用自身初始化引用成员.真的是合法的C++吗?
- 为什么当类具有引用成员时C++编译器不删除复制构造函数
- 引用成员到构造函数参数按值传递
- 在执行不平凡的构造函数之前引用成员
- 具有引用成员变量的多态性
- 从按值构造函数参数初始化的引用成员
- 深度复制包含引用成员(C++)的结构