我已经尝试使用谷歌搜索,但未能找到一个简单的问题的直接答案,涉及清理动态内置指针的内存。
您是否必须解除分配/清理已在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?
提前致谢
答案 0 :(得分:2)
不确定您的顾虑,
但在你的示例行中:
mrPointer = nullptr;
除了将nullptr
分配给mrPointer
之外什么都不做,而且这里没有必要。
请更好地使用std::shared_ptr
- 它将帮助您管理记忆
要使用shared_ptr
,std::static_pointer_cast
和std::dynamic_pointer_cast
来投射std::const_pointer_cast
。
答案 1 :(得分:1)
如果要释放不再使用的资源,例如指针指向的对象,在您的情况下动态转换,要么使用delete
运算符并放置之后不再使用指针,即:
delete mrPointer;
或您可以使用智能指针,例如shared_ptr
,在特定情况下,其对象将被销毁并且其内存会自动释放。
如果你的指针在其整个生命周期中只拥有一个对象,你可以使用unique_ptr
,这将再次为你处理资源管理。
动态强制转换用于将原始内存地址解释为特定类型,并且不应影响您对内存资源管理的视图,即指针指向的内存在不再需要时应该是空闲的,无论指针是否已经指向已知类型的内存或您使用explicit type conversion解释的类型。