[英]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_cast
, std::dynamic_pointer_cast
和std::const_pointer_cast
。
如果要释放不再使用的资源(例如,指针指向的对象的指针),在您的情况下进行动态转换,则可以使用delete
运算符,然后将不再使用的指针放在其后,即:
delete mrPointer;
或者您可以使用诸如shared_ptr
类的智能指针,在特定情况下,该对象的对象将被销毁并自动释放其内存。
如果指针在整个生命周期中仅拥有一个对象,则可以使用unique_ptr
,这将再次为您管理资源。
动态类型转换用于将原始内存地址解释为特定类型,并且不应影响您对内存资源管理的看法,即,当不再需要指针所指向的内存时,无论指针是否指向已知类型的指针,都应将其释放。内存或使用显式类型转换将其转换为您要解释的类型 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.