首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态铸造指针的C++内存清理

动态铸造指针的C++内存清理
EN

Stack Overflow用户
提问于 2015-12-19 03:52:08
回答 2查看 2.5K关注 0票数 0

我试着搜索了一下,但是还没有找到一个简单的问题的直接答案,这个问题涉及到动态抛出的指针的内存清理。

您必须释放/清除已在C++中动态抛出的指针,还是由编译器自动清除?

例如:

代码语言:javascript
复制
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?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-19 04:11:52

不确定你的担心,

但是在您的示例行中:

代码语言:javascript
复制
mrPointer = nullptr;

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

请更好地使用std::shared_ptr --它将帮助您管理内存。

要转换shared_ptr,请使用std::static_pointer_caststd::dynamic_pointer_caststd::const_pointer_cast

票数 2
EN

Stack Overflow用户

发布于 2015-12-19 09:17:53

如果您希望释放不再使用的资源(例如,指针指向的对象指针),在您的情况下动态转换,则可以使用或者使用delete运算符,然后将不再使用的指针放在后面,即:

代码语言:javascript
复制
delete mrPointer;

--您可以使用诸如shared_ptr这样的智能指针,在特定的情况下,它的对象被销毁,其内存被自动释放。

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

注意:

动态强制转换用于将原始内存地址解释为特定类型,不应影响您对内存资源管理的看法,即当不再需要指针时,指针所指向的内存应该是空闲的,无论指针指向已经知道的内存类型,还是指向使用显式类型转换使其解释的类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34367094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档