C26414 使用 CRecordset 的问题
C26414 issue with using CRecordset
我在这里 (C++ Code Analysis in Visual Studio Community 2019 produces warnings C26486 and C26414) 看到过类似的讨论,其中提到使用 std::move
但我不确定这是否是我需要做的。
我把CRecordset *pRecords = new CRecordSet(&m_dbDatabase)
变成了智能指针。像这样:
auto pRecordset = std::make_unique<CRecordset>(&m_dbDatabase);
现在我收到 8 个类似的代码分析警告:
C26414: Move, copy, reassign or reset a local smart pointer 'pRecords' (r.5).
我想我知道这可以变成我的 CPTSDatabase
class 的成员变量,在打开数据库时填充它。然后简单地使用相同的指针。
为了尝试这样做,我将其添加到我的头文件中:
auto m_pRecords = std::unique_ptr<CRecordSet>;
然后我打算在打开数据库后这样做:
m_pRecords = std::make_unique<CRecordSet>(&m_dbDatabase);
但它不喜欢我定义变量的方式。
我该如何解决这个问题?
您尝试将 auto
用于 class 成员 m_pRecords
时有两个错误。
首先,您不能将 auto
用于(非静态)class 成员变量。我在 this C++17 Draft Standard 中找不到 explicit 规则,但是 [dcl.spec.auto][=40= 的第一部分] 部分确实间接地覆盖了它(强调我的):
10.1.7.4 The auto
specifier [dcl.spec.auto]
1 The auto
and decltype(auto)
type-specifiers are used to designate a
placeholder type that will be replaced later by deduction from an
initializer. …
因此,在定义 class 时,later 推导是不合适的,因为 class 未根据您提供的信息完全定义.
其次,即使在 class 定义之外,auto m_pRecords = std::unique_ptr<CRecordset>;
表达式也是无效语法。 auto
关键字允许从作为其初始化给出的 表达式 的值推导出变量的类型(=
的右侧运算符)——以及类型名称 不是 表达式。
因此,作为解决方案,您应该像这样声明 class 的智能指针成员:
std::unique_ptr<CRecordset> m_pRecords;
我在这里 (C++ Code Analysis in Visual Studio Community 2019 produces warnings C26486 and C26414) 看到过类似的讨论,其中提到使用 std::move
但我不确定这是否是我需要做的。
我把CRecordset *pRecords = new CRecordSet(&m_dbDatabase)
变成了智能指针。像这样:
auto pRecordset = std::make_unique<CRecordset>(&m_dbDatabase);
现在我收到 8 个类似的代码分析警告:
C26414: Move, copy, reassign or reset a local smart pointer 'pRecords' (r.5).
我想我知道这可以变成我的 CPTSDatabase
class 的成员变量,在打开数据库时填充它。然后简单地使用相同的指针。
为了尝试这样做,我将其添加到我的头文件中:
auto m_pRecords = std::unique_ptr<CRecordSet>;
然后我打算在打开数据库后这样做:
m_pRecords = std::make_unique<CRecordSet>(&m_dbDatabase);
但它不喜欢我定义变量的方式。
我该如何解决这个问题?
您尝试将 auto
用于 class 成员 m_pRecords
时有两个错误。
首先,您不能将 auto
用于(非静态)class 成员变量。我在 this C++17 Draft Standard 中找不到 explicit 规则,但是 [dcl.spec.auto][=40= 的第一部分] 部分确实间接地覆盖了它(强调我的):
10.1.7.4 The
auto
specifier [dcl.spec.auto]1 The
auto
anddecltype(auto)
type-specifiers are used to designate a placeholder type that will be replaced later by deduction from an initializer. …
因此,在定义 class 时,later 推导是不合适的,因为 class 未根据您提供的信息完全定义.
其次,即使在 class 定义之外,auto m_pRecords = std::unique_ptr<CRecordset>;
表达式也是无效语法。 auto
关键字允许从作为其初始化给出的 表达式 的值推导出变量的类型(=
的右侧运算符)——以及类型名称 不是 表达式。
因此,作为解决方案,您应该像这样声明 class 的智能指针成员:
std::unique_ptr<CRecordset> m_pRecords;