这是一个新问题,但我对C++中的指针有疑问.情况就是这样.
我有一个类A,它作为类B的指针的集合(实际上是一个向量).同一个类A有另一个指向类C的指针集合.最后,类B的对象也有一个指向类C指针的集合.对于A类指向的相同实例.
我的问题是,如果我在类B中删除了类C类型指针的成员,那么A类中指向已删除的类C实例的指针会发生什么?如何处理这种情况?
非常感谢提前!
Julen.
我的理解:
Run Code Online (Sandbox Code Playgroud)A - vector<B*> - vector<C*> B - vector<C*>
从B中你删除所有的C*.
您需要单独删除每个内存地址,但最多只能删除一次.
任何指向已删除地址的指针仍然保持相同的地址,如果您使用它,它只会产生未定义的行为.
因此,请确保不要从已删除的A中重新删除B*,并确保在删除后不使用它们.
您可能想要重新考虑您的层次结构/设计.
或者如果你需要以这种方式存储东西,可以考虑使用boost :: shared_ptr.实际上,只要你存储指针集合,你应该使用boost :: shared_ptr.如果您正在使用boost :: shared_ptr,则不要删除,也不必担心使其他指针无效.
考虑使用合适的智能指针将原始指针保存在容器中,而不是使用直接的原始指针,这样可以省去弄清楚如何手动删除它们的麻烦.这些通常还支持自定义释放函数和仿函数,以备您需要时使用.您可以查看shared_ptr或weak_ptr,具体取决于您的需求.您可能还会发现unique_ptr很有用,这一切都取决于您的要求.
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |