【发布时间】:2021-12-09 16:32:57
【问题描述】:
示例代码:
void COptionsDlg::OnBnClickedButtonMoreSettings()
{
CString strCaption = _T("");
const auto pMoreSettingsButton = GetDlgItem(IDC_BUTTON_MORE_SETTINGS);
if (pMoreSettingsButton == nullptr)
return;
pMoreSettingsButton->GetWindowText(strCaption);
__pragma(warning(suppress:26414))
auto pDlgOther = std::make_unique<COtherSettingsSheet>(strCaption);
if (pDlgOther != nullptr)
{
pDlgOther->DoModal();
}
}
为什么编译器仍然抱怨这一行:
它仍然说:
C26462:
pMoreSettingsButton指向的值只赋值一次,标记为指向const的指针(con.4)。
我正在使用 Visual Studio 2022 Preview 6,并且在其他类文件中也注意到了这一点。是我做错了什么还是我应该向 Microsoft 解决的错误?
【问题讨论】:
-
我认为它希望你做
const CWnd* pMoreSettingsButton = ...;而const auto使它成为CWnd* const- 指针本身是常量,而不是指针。在我看来,这条建议的价值值得怀疑。 -
@IgorTandetnik 你是对的 - 像这样改变它会阻止它显示。
-
不相关,但
unique_ptr再往下不是真的必要。您可以将对话框设置为局部变量,即COtherSettingsSheet dlg(strCaption); dlg.DoModal();,然后在函数退出时清除所有内容。 -
@IInspectable 我这样做的原因有时是代码分析表明函数堆栈大小太大或其他什么(不太记得)。但是像这样进行更改,这些警告就会消失。
-
这是有道理的。堆栈大小非常有限(默认为 1MB),因此将大对象放在堆栈上会很快耗尽。
标签: visual-c++ mfc code-analysis visual-studio-2022