在源码树中获取 boost:shared_ptr 的 get 方法的所有使用列表

Posted

技术标签:

【中文标题】在源码树中获取 boost:shared_ptr 的 get 方法的所有使用列表【英文标题】:Get a list of all uses of boost:shared_ptr's get method in a source tree 【发布时间】:2013-01-11 19:04:02 【问题描述】:

我正在尝试在一个大型项目中查找所有使用 boost::shared 的“get”方法的案例——其中某些内容并不具体。

问题是一些程序员在某些时候马虎并开始使用裸指针,使用 foo.get() 来控制它们。所以我的目标是找到所有使用这个 get 方法来审查和修复代码的地方。

我曾考虑修改 shared_ptr boost 标头以注释掉该方法并使用“-k”选项运行 make 以发现所有此类位置,但也许有更优雅的方法来做到这一点?

【问题讨论】:

Ctrl+F, ".get()", <enter>. +1 先评论简单的解决方案。 我怀疑“大项目”意味着“搜索 'get()' 是大量误报”。 +1 Drew。不仅 Ctrl+F 甚至是一个选项,find 和 grep 会给你很多错误的 +ves。 get 是最常用的方法名。你越是试图消除错误的+ve,你就会越花哨,直到你对自己说。 “伙计!我可以用这么多的努力编写一个 c++ 解析器” Ctrl+F 不会在目录结构中搜索,并且不会对调用 get 方法的对象的类型做任何聪明的事情......老实说,该评论不值得一个 + 1(有见地)但 -1(巨魔)! 【参考方案1】:

我喜欢你的想法。听起来您担心修改系统头文件,这是一种错误的形式。

这是一个更优雅的想法。将头文件复制到 /tmp/tmpinclude,然后添加 CFLAG -I/tmp/tmpinclude 并确保这是第一个 -I CFlag。现在您的 hack 已包含在您的用户/沙盒空间中。

【讨论】:

以上是关于在源码树中获取 boost:shared_ptr 的 get 方法的所有使用列表的主要内容,如果未能解决你的问题,请参考以下文章

boost库之内存管理shared_ptr

使用带有 boost::shared_ptr 的基类在地图中查找

boost: 使用自定义删除器序列化 shared_ptr

Boost智能指针——shared_ptr

为啥 boost shared_ptr 包含带有 close() 的标头?

如何使用 boost::shared_ptr 构造二叉树