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

C++ Memory Cleanup of Dynamic Cast Pointers

我试过谷歌搜索,但未能找到一个简单问题的直接答案,该问题涉及为动态转换指针清理内存。

您是否必须 deallocate/cleanup 一个在 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 之外什么都不做,这里不需要。

请更好地使用 std::shared_ptr - 它会帮助您管理内存。
要投射 shared_ptr 使用 std::static_pointer_caststd::dynamic_pointer_caststd::const_pointer_cast.

如果你想释放不再使用的资源,例如指针指向的对象指针,在你的情况下动态转换,你要么使用delete 运算符并将不再使用的指针放在它后面,即:

delete mrPointer;

你可以使用像shared_ptr这样的智能指针,它的对象在特定情况下会被销毁并自动释放内存。

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


注:

动态转换用于将原始内存地址解释为特定类型,不应影响您对内存资源管理的看法,即指针指向的内存在不再需要时应该是空闲的,无论指针是否指向使用 explicit type conversion.

到已知的内存类型或您让它解释的类型