指针和C++中的指针集合.如何正确删除

Jul*_*len 3 c++

这是一个新问题,但我对C++中的指针有疑问.情况就是这样.

我有一个类A,它作为类B的指针的集合(实际上是一个向量).同一个类A有另一个指向类C的指针集合.最后,类B的对象也有一个指向类C指针的集合.对于A类指向的相同实例.

我的问题是,如果我在类B中删除了类C类型指针的成员,那么A类中指向已删除的类C实例的指针会发生什么?如何处理这种情况?

非常感谢提前!

Julen.

Bri*_*ndy 6

我的理解:

A
 - vector<B*>
 - vector<C*>

B
 - vector<C*>
Run Code Online (Sandbox Code Playgroud)

从B中你删除所有的C*.


您需要单独删除每个内存地址,但最多只能删除一次.

任何指向已删除地址的指针仍然保持相同的地址,如果您使用它,它只会产生未定义的行为.

因此,请确保不要从已删除的A中重新删除B*,并确保在删除后不使用它们.


您可能想要重新考虑您的层次结构/设计.

或者如果你需要以这种方式存储东西,可以考虑使用boost :: shared_ptr.实际上,只要你存储指针集合,你应该使用boost :: shared_ptr.如果您正在使用boost :: shared_ptr,则不要删除,也不必担心使其他指针无效.


Jac*_*cob 5

考虑使用合适的智能指针将原始指针保存在容器中,而不是使用直接的原始指针,这样可以省去弄清楚如何手动删除它们的麻烦.这些通常还支持自定义释放函数和仿函数,以备您需要时使用.您可以查看shared_ptr或weak_ptr,具体取决于您的需求.您可能还会发现unique_ptr很有用,这一切都取决于您的要求.