当来自“新”的指针出现时,如何跟踪情况?表达式传递给dynamic_cast?

发布于 2024-10-28 14:27:10 字数 403 浏览 1 评论 0原文

最近我在查看一些旧代码时发现了以下内容:

auto_ptr<DerivedClass> pointer = dynamic_cast<CBase*>( new CDerived() );

除了这个代码在有效情况下毫无意义之外(在有效情况下class Derived是从class Base派生的,并且没有dynamic_cast 是必要的)对象所有权存在问题。如果出于某种原因 dynamic_cast 返回空指针,则 auto_ptr 将不会绑定到创建的对象,并且该对象将被泄漏。

是否有一些技术可以帮助防止此类错误,例如使编译器发出警告或类似的内容?

Recently I found the following while reviewing some old code:

auto_ptr<DerivedClass> pointer = dynamic_cast<CBase*>( new CDerived() );

aside from the fact that this code is meaningless in valid cases (in valid cases class Derived is derived from class Base and no dynamic_cast is necessary) there's a problem with object ownership. If for whatever reason dynamic_cast returns a null pointer the auto_ptr will not be bound to the created object and the object will be leaked.

Is there some technique to help prevent such errors like making a compiler issue a warning or anything like that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

涙—继续流 2024-11-04 14:27:10

摆脱所有dynamic_cast

所有的人。

那么就不需要跟踪了。

Get rid of all your dynamic_casts.

All of them.

Then no tracking will be necessary.

木有鱼丸 2024-11-04 14:27:10

如果您找不到任何可用的内容,您还可以添加自己的 规则cpp 检查

If you can't find anything already available you can also add your own rule to cpp check

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文