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

时间:2015-12-19 03:52:09

标签: c++ pointers dynamic-cast

我已经尝试使用谷歌搜索,但未能找到一个简单的问题的直接答案,涉及清理动态内置指针的内存。

您是否必须解除分配/清理已在C ++中动态转换的指针,或者是否由编译器自动清理等。?

e.g。

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?

提前致谢

2 个答案:

答案 0 :(得分:2)

不确定您的顾虑,
但在你的示例行中:

mrPointer = nullptr;

除了将nullptr分配给mrPointer之外什么都不做,而且这里没有必要。

请更好地使用std::shared_ptr - 它将帮助您管理记忆 要使用shared_ptrstd::static_pointer_caststd::dynamic_pointer_cast来投射std::const_pointer_cast

答案 1 :(得分:1)

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

delete mrPointer;

您可以使用智能指针,例如shared_ptr,在特定情况下,其对象将被销毁并且其内存会自动释放。

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

注意:

动态强制转换用于将原始内存地址解释为特定类型,并且不应影响您对内存资源管理的视图,即指针指向的内存在不再需要时应该是空闲的,无论指针是否已经指向已知类型的内存或您使用explicit type conversion解释的类型。