当我使用以下代码时,收到警告(通过应用cppcoreguideline)。 代码:
library(tidyr)
library(dplyr)
data %>%
group_by(key) %>%
nest(my_data = -group_cols())
# A tibble: 26 x 2
# Groups: key [26]
# key my_data
# <chr> <list>
# 1 a <tibble [2 × 2]>
# 2 b <tibble [2 × 2]>
# 3 c <tibble [2 × 2]>
# 4 d <tibble [2 × 2]>
# 5 e <tibble [2 × 2]>
# 6 f <tibble [2 × 2]>
# 7 g <tibble [2 × 2]>
# 8 h <tibble [2 × 2]>
# 9 i <tibble [2 × 2]>
#10 j <tibble [2 × 2]>
# … with 16 more rows
警告:
SampleClass *object = nullptr;
object = new SampleClass();
我听不懂, 有人可以用简单的术语来对此进行解释。
答案 0 :(得分:5)
gsl::owner<T*>
旨在表示谁拥有此对象的人是基础T
对象的
当您将gsl :: owner分配给原始指针(例如SampleClass *object
)时,所有权语义将丢失并且静态分析器(在这种情况下为整洁)验证以后object
是否正确使用。这就是为什么在这种情况下会收到警告的原因:因为丢失此信息是一个坏主意,并且通常会导致错误的代码。
要解决此错误,您可以使用gsl :: owner明确地手动注释对象,例如gsl::owner<SampleClass*> object;
。
另一种可能更简单的选择是使用std::unique_ptr
(通常通过std::make_unique<SampleClass>()
),这将在编译时提供强大的安全保证(即使不使用clang-tidy等其他分析器)正确使用。它还会自动删除对象,而gsl :: owner不会。