I use boost::intrusive_ptr
in my project and have such code:
void foo(boost::intrusive_ptr<MyObject> obj) {
// do something with obj
}
And I have clang-tidy diagnostic:
Clang-Tidy: The parameter 'obj' is copied for each invocation but only used as a const reference; consider making it a const reference
But boost::intrusive_ptr
copying on function invocation is intended usage of it, because it's wrapping a pointer and usually we don't want to add one more level of indirection. There are no such diagnostic for std::shared_ptr
which have similar usage.
How to add boost::intrusive_ptr
to the list of clang-tidy exceptions for this diagnostic rule to avoid false warnings?
CodePudding user response:
Clang-tidy has a configuration file (.clang-tidy
) in which you can specify options for checks. According to https://clang.llvm.org/extra/clang-tidy/checks/performance/unnecessary-value-param.html the offending check has an option to ignore specified types. I think it should be something like
CheckOptions:
- key: performance-unnecessary-value-param.AllowedTypes
value: ^boost::intrusive_ptr<.*>$
in the .clang-tidy
file. The file path can also be given explicitly with --config-file
or the configuration can be given as a string in the --config
command line argument. See the documentation for details.
The value field is a semicolon-separated list of regex to match against.
CodePudding user response:
IfSince you don't take shared-ownership and the pointer isn't expected to be null, just pass MyObject&
or MyObject const&
. It's simpler, more expressive and less tightly coupled. (Now you can use the function e.g. in a unit test without needing the unrelated intrusive_ptr
for the occasion).
If it can be null, you can pass intrusive_ptr<MyObject> const&
.