繁体   English   中英

动态强制转换指针的C ++内存清理

[英]C++ Memory Cleanup of Dynamic Cast Pointers

我曾尝试使用Google搜索,但无法找到一个简单的问题的直接答案,该问题涉及为动态强制转换的指针清除内存。

您是否必须取消分配/清除已在C ++中动态转换的指针,还是由编译器等自动清除了该指针?

例如

BaseType* obj;
DerivedType* mrPointer = dynamic_cast<DerivedType*>(obj);
//Code happens here
//At the end up the use of mrPointer
mrPointer = nullptr;  //Is this necessary/Is there a more proper way to cleanup?

提前致谢

不确定您的担心,
但在您的示例行中:

mrPointer = nullptr;

除了将nullptr分配给mrPointer之外,什么都不mrPointer并且在此不必要。

并请更好地使用std::shared_ptr这将帮助您管理内存。
要转换shared_ptr使用std::static_pointer_caststd::dynamic_pointer_caststd::const_pointer_cast

如果要释放不再使用的资源(例如,指针指向的对象的指针),在您的情况下进行动态转换,则可以使用delete运算符,然后将不再使用的指针放在其后,即:

delete mrPointer;

或者您可以使用诸如shared_ptr类的智能指针,在特定情况下,该对象的对象将被销毁并自动释放其内存。

如果指针在整个生命周期中仅拥有一个对象,则可以使用unique_ptr ,这将再次为您管理资源。


注意:

动态类型转换用于将原始内存地址解释为特定类型,并且不应影响您对内存资源管理的看法,即,当不再需要指针所指向的内存时,无论指针是否指向已知类型的指针,都应将其释放。内存或使用显式类型转换将其转换为您要解释的类型

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM