我试着搜索了一下,但是还没有找到一个简单的问题的直接答案,这个问题涉及到动态抛出的指针的内存清理。
您必须释放/清除已在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?提前感谢
发布于 2015-12-19 04:11:52
不确定你的担心,
但是在您的示例行中:
mrPointer = nullptr;除了将nullptr分配给mrPointer之外,什么也不做,在这里没有必要。
请更好地使用std::shared_ptr --它将帮助您管理内存。
要转换shared_ptr,请使用std::static_pointer_cast、std::dynamic_pointer_cast和std::const_pointer_cast。
发布于 2015-12-19 09:17:53
如果您希望释放不再使用的资源(例如,指针指向的对象指针),在您的情况下动态转换,则可以使用或者使用delete运算符,然后将不再使用的指针放在后面,即:
delete mrPointer;或--您可以使用诸如shared_ptr这样的智能指针,在特定的情况下,它的对象被销毁,其内存被自动释放。
如果指针在整个生命周期中只拥有一个对象,则可以使用unique_ptr,这将再次为您处理资源管理。
注意:
动态强制转换用于将原始内存地址解释为特定类型,不应影响您对内存资源管理的看法,即当不再需要指针时,指针所指向的内存应该是空闲的,无论指针指向已经知道的内存类型,还是指向使用显式类型转换使其解释的类型。
https://stackoverflow.com/questions/34367094
复制相似问题