[英]Why do I get a c26486 warning when passing a shared ptr object
我已經編寫了一些測試代碼,以便在 vs2019 中與 c++ 指南代碼檢查器一起使用。 我收到以下警告,但我不知道如何擺脫它們。
第 60 行 - 警告 C26486:不要將可能無效的指針傳遞給 function。 對“icall”的調用中的參數 0“@@v”可能無效(lifetime.3)。
第 79 行警告 C26486:不要將可能無效的指針傳遞給 function。 對“icall”的調用中的參數 0“@a”可能無效(lifetime.3)。
#include <memory>
#include <string>
#include <iostream>
#include <vector>
using namespace::std;
class IReconQElem {
public:
virtual string getDesc() = 0;
};
class classA : public IReconQElem {
public:
int a;
int b;
string desc;
string getDesc() override {
return desc;
}
classA(int a) noexcept {
this->a = a;
b = 0;
}
virtual ~classA() {
}
};
static void g(string a) {
cout << a;
}
typedef shared_ptr<IReconQElem> IReconQElemPtr;
typedef vector<IReconQElemPtr> IReconQElemPtrsV;
IReconQElemPtrsV v;
static IReconQElemPtr func(IReconQElemPtr tid)
{
v.push_back(tid);
IReconQElemPtr ptr;
for (auto& elem1 : v) {
g(elem1->getDesc()); //this generates the warning
break;
}
return ptr;
}
int main()
{
IReconQElemPtr tid = make_shared<classA>(1);
IReconQElemPtr tid1 = make_shared<classA>(2);
v.push_back(tid);
v.push_back(tid1);
auto a = func(tid);
auto a1 = func(tid1);
auto copy = a;
g(a->getDesc()); //this generates the warning
return 0;
}
警告是正確的, func
中的elem1
和main
中的a
都可能是持有nullptr
的shared_ptr
。 您可以使用gsl::not_null
來明確指針不能是nullptr
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.