gpt4 book ai didi

c++ - 使用 std::shared_ptr 检测循环引用

转载 作者:搜寻专家 更新时间:2023-10-31 00:18:10 29 4
gpt4 key购买 nike

出于依赖注入(inject)(测试驱动开发)的目的,我使用了很多接口(interface)。因此,我的很多对象都通过 std::shared_ptr 指向。我会使用 std::unique_ptr 但他们没有谷歌模拟时所需的复制构造函数。

如果发生循环引用,我可以采取哪些措施及早发现它们?

我正在使用 google 测试在 linux 平台上工作。

最佳答案

自动检测共享指针的循环引用是不可能的,我用来检测循环引用的一种技术是通过以下方式明确地进行。维护一个全局可访问的 std::vector< T* > ,在所有 ctors 中将对象添加到 vector,然后在 dtors 中将其删除。然后在 main 的末尾,您只需检查 vector 是否为空,如果不是,那么您可能在某处有循环引用, vector 将帮助您找到位置。如果您拥有由静态分配的对象拥有的共享指针,则很容易遇到误报,尤其是在应用静态初始化顺序失败时。

在 boost 中有定义 BOOST_SP_ENABLE_DEBUG_HOOKS通过它可以为所有类型广泛应用此应用。

关于c++ - 使用 std::shared_ptr 检测循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11448418/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com