Rav*_*avi 5 c++ cpp-core-guidelines
当我使用以下代码时,我收到一条警告(来自应用 cppcoreguideline)。代码:
SampleClass *object = nullptr;
object = new SampleClass();
Run Code Online (Sandbox Code Playgroud)
警告:
warning: assigning newly created 'gsl::owner<>' to non-owner 'SampleClass *' [cppcoreguidelines-owning-memory]
Run Code Online (Sandbox Code Playgroud)
我无法理解,有人可以用简单的术语解释一下。
gsl::owner<T*>旨在指定持有此对象的人是底层T对象的所有者,并负责稍后释放内存。请注意,仍然需要显式删除操作——GSL 注释旨在辅助静态分析工具。(有关所有权的更多信息,请参阅此帖子。)
当您将 gsl::owner 分配给诸如的原始指针时SampleClass *object,所有权语义将丢失,并且静态分析器(在本例中为 clang-tidy)无法验证object将来是否正确使用。这就是为什么在这种情况下您会收到警告:因为丢失此信息是一个坏主意,并且通常会导致代码不正确。
要修复此错误,您可以通过显式使用 gsl::owner 手动注释对象,例如gsl::owner<SampleClass*> object;。
另一个可能更简单的替代方法是使用std::unique_ptr(通常是 via std::make_unique<SampleClass>()),它会在编译时提供强大的安全保证(即使不使用像 clang-tidy 这样的其他分析器),只要它使用得当。它还会自动删除对象,而 gsl::owner 不会。
| 归档时间: |
|
| 查看次数: |
1527 次 |
| 最近记录: |