【发布时间】:2021-05-23 05:12:59
【问题描述】:
我正在使用 clang-tidy 分析代码库,并看到一个我不理解的警告。警告由以下代码行调用:
void fun(const QString& bar) {
const char* c_format = bar.toStdString().c_str();
expand_some_macro(c_format);
}
c_format 在扩展宏中传递,其内容如下:
#define expand_some_macro(c_format)\
char buffer[MAX_SIZE];\
va_list args;\
va_start(args, c_format);\
vsnprintf(buffer, MAX_SIZE, _TRUNCATE, c_format, args);\
va_end(args);
其中包括来自shlobj 标头的函数调用,我目前不明白。 clang-tidy 生成以下警告:
warning: object backing the pointer will be destroyed at the end of the full-expression [clang-diagnostic-dangling-gsl]
我浏览了网络,尤其是c++ core guidelines,试图让自己了解这个警告,但找不到合适的参考。这让我想到了两组问题:
- 此警告的参考是什么?我在哪里可以了解这个类似的警告?
- 上面的代码可能有什么问题?我需要在作用域末尾调用
delete[] c_format吗?
【问题讨论】:
-
GM 回答了我的问题,但只是留下一些参考来说明不指向临时人员的更广泛的观点(并且因为我不知道编辑问题的礼仪:1.GCC's warning 和 2. Core Guideline
标签: c++ pointers warnings clang-tidy cpp-core-guidelines