C++ 警告:将新创建的 gsl::owner<> 分配给非所有者



当我使用以下代码时,我收到警告(来自应用 cppcoreguideline(。 法典:

SampleClass *object = nullptr;
object = new SampleClass();

警告:

warning: assigning newly created 'gsl::owner<>' to non-owner 'SampleClass *' [cppcoreguidelines-owning-memory]

当我搜索并到达此链接时 https://releases.llvm.org/8.0.1/tools/clang/tools/extra/docs/clang-tidy/checks/cppcoreguidelines-owning-memory.html

我无法理解, 有人可以用简单的术语解释一下吗?

gsl::owner<T*>

旨在指定持有此对象的人是底层T对象的所有者,并负责稍后释放内存。请注意,仍然需要显式删除操作 — GSL 注释旨在帮助静态分析工具。(有关所有权的更多信息,请参阅此帖子。

当您将 gsl::owner 分配给原始指针(如SampleClass *object(时,所有权语义将丢失,并且静态分析器(在本例中为 clang-tidy(无法验证将来是否正确使用object。这就是为什么在这种情况下您会收到警告的原因:因为丢失此信息是一个坏主意,并且通常会导致不正确的代码。

要修复此错误,您可以通过显式使用 gsl::owner 手动注释对象,例如gsl::owner<SampleClass*> object;

另一种可能更简单的替代方案是使用std::unique_ptr(通常通过std::make_unique<SampleClass>()(,只要使用得当,它将在编译时提供强大的安全保证(即使不使用其他分析器,如 clang-tidy(。它还会自动删除对象,而 gsl::owner 不会。

相关内容

  • 没有找到相关文章

最新更新