C++ 警告:将新创建的 gsl::owner<> 分配给非所有者
C++ Warning: Assigning newly created gsl::owner<> to non-owner
当我使用以下代码时,我收到警告(来自应用 cppcoreguideline)。
代码:
SampleClass *object = nullptr;
object = new SampleClass();
警告:
warning: assigning newly created 'gsl::owner<>' to non-owner 'SampleClass *' [cppcoreguidelines-owning-memory]
当我搜索并找到这个时 link
https://releases.llvm.org/8.0.1/tools/clang/tools/extra/docs/clang-tidy/checks/cppcoreguidelines-owning-memory.html
我无法理解,
谁能用简单的术语解释一下。
gsl::owner<T*>
的意思是指定持有这个对象的人是底层T
对象的所有者,并负责稍后释放内存。请注意,仍然需要显式删除操作——GSL 注释旨在辅助静态分析工具。 (有关所有权的更多信息,请参阅 this post。)
当您将 gsl::owner 分配给 原始指针 时,例如 SampleClass *object
,所有权语义将丢失并且静态分析器(clang-tidy in这种情况)无法验证 object
将来是否正确使用。这就是您在这种情况下收到警告的原因:因为丢失此信息是个坏主意,而且通常会导致代码不正确。
要修复此错误,您可以显式使用 gsl::owner 手动注释对象,例如 gsl::owner<SampleClass*> object;
.
另一种可能更简单的替代方法是使用 std::unique_ptr
(通常通过 std::make_unique<SampleClass>()
),这将在编译时提供强大的安全保证(即使不使用其他分析器,如 clang-tidy)只要使用得当。它还会自动删除对象,而gsl::owner不会。
当我使用以下代码时,我收到警告(来自应用 cppcoreguideline)。 代码:
SampleClass *object = nullptr;
object = new SampleClass();
警告:
warning: assigning newly created 'gsl::owner<>' to non-owner 'SampleClass *' [cppcoreguidelines-owning-memory]
当我搜索并找到这个时 link https://releases.llvm.org/8.0.1/tools/clang/tools/extra/docs/clang-tidy/checks/cppcoreguidelines-owning-memory.html
我无法理解, 谁能用简单的术语解释一下。
gsl::owner<T*>
的意思是指定持有这个对象的人是底层T
对象的所有者,并负责稍后释放内存。请注意,仍然需要显式删除操作——GSL 注释旨在辅助静态分析工具。 (有关所有权的更多信息,请参阅 this post。)
当您将 gsl::owner 分配给 原始指针 时,例如 SampleClass *object
,所有权语义将丢失并且静态分析器(clang-tidy in这种情况)无法验证 object
将来是否正确使用。这就是您在这种情况下收到警告的原因:因为丢失此信息是个坏主意,而且通常会导致代码不正确。
要修复此错误,您可以显式使用 gsl::owner 手动注释对象,例如 gsl::owner<SampleClass*> object;
.
另一种可能更简单的替代方法是使用 std::unique_ptr
(通常通过 std::make_unique<SampleClass>()
),这将在编译时提供强大的安全保证(即使不使用其他分析器,如 clang-tidy)只要使用得当。它还会自动删除对象,而gsl::owner不会。