【发布时间】:2021-04-16 11:02:58
【问题描述】:
使用以下 proto 文件
message Foo {
// ...
}
message MyMessage {
Foo foo = 1;
}
我使用生成的set_allocated_foo 方法设置foo,该方法获取指针的所有权:
MyMessage m;
m.set_allocated_foo(new Foo);
当m 离开范围时,clang-tidy 给了我以下警告:
warning: Potential memory leak [clang-analyzer-cplusplus.NewDeleteLeaks]
}
^
note: Memory is allocated
m.set_allocated_foo(new Foo);
^
有什么办法可以避免吗? (不使用// NOLINT)
【问题讨论】:
-
答案在以下链接中:stackoverflow.com/a/33995232/994042。 “只要你不调用release_,protobuf会负责删除对象。如果你在处理完Protobuf Message之后需要Object,你需要使用release_来释放它,这样会阻止Protobuf删除您的对象。”
-
这只是告诉我警告是误报。我该如何避免呢?
-
您可以禁用检查:clang-tidy test.cpp -checks=-clang-analyzer-cplusplus.NewDeleteLeaks
-
这比使用
// NOLINT还要糟糕,因为它还会禁用其他有用的消息。所以这只是 clang-tidy 的一个 bug? -
“潜在的内存泄漏”意味着在这个地方内存可能不会被释放。您可以自己手动释放它。不是clang-tidy的bug,可能是clang-tidy检查的bug。
标签: c++ protocol-buffers clang-static-analyzer clang-tidy