范围for循环重置指针为nullptr无效,求指针引用方式及Qt实现方案
解决指针批量置nullptr的问题
嗨,这个坑我之前踩过!你用的范围for循环里的item确实是每个指针的副本,所以修改它完全不会影响到原来的指针变量,白忙活一场😅。下面给你几个靠谱的解决思路:
常规C++实现方案
方法1:用std::reference_wrapper包装指针
通过std::ref把每个指针包装成引用对象,这样遍历的时候拿到的就是原指针的引用,就能直接修改了:
#include <functional> // 别忘包含这个头文件 // 假设ptr1、ptr2、ptr3是已定义的指针变量 for (auto& item : { std::ref(ptr1), std::ref(ptr2), std::ref(ptr3) }) { item.get() = nullptr; }
方法2:存指针的地址到数组,遍历修改
把每个原指针的地址放进数组,遍历的时候解引用地址就能修改原指针的值:
// 数组里存的是原指针的地址 auto* pointers[] = { &ptr1, &ptr2, &ptr3 }; for (auto p : pointers) { *p = nullptr; // 解引用后修改原指针 }
Qt环境下的实现
如果你是用Qt的容器(比如QList、QVector)来管理这些指针,直接遍历容器的引用就行:
// 先把指针放进Qt容器 QList<MyClass*> ptrContainer = { ptr1, ptr2, ptr3 }; for (auto& ptr : ptrContainer) { ptr = nullptr; }
要是你不想把指针放进容器,那上面的常规C++方法在Qt里也完全适用。另外如果用的是Qt的智能指针QPointer,直接赋值nullptr就好,它本身就支持空值赋值,还能自动追踪对象生命周期。
内容的提问来源于stack exchange,提问作者N Strahl
相关产品推荐
相关产品推荐

