forked from OSchip/llvm-project
26 lines
910 B
ReStructuredText
26 lines
910 B
ReStructuredText
.. title:: clang-tidy - cppcoreguidelines-slicing
|
|
|
|
cppcoreguidelines-slicing
|
|
=========================
|
|
|
|
Flags slicing of member variables or vtable. Slicing happens when copying a
|
|
derived object into a base object: the members of the derived object (both
|
|
member variables and virtual member functions) will be discarded. This can be
|
|
misleading especially for member function slicing, for example:
|
|
|
|
.. code-block:: c++
|
|
|
|
struct B { int a; virtual int f(); };
|
|
struct D : B { int b; int f() override; };
|
|
|
|
void use(B b) { // Missing reference, intended?
|
|
b.f(); // Calls B::f.
|
|
}
|
|
|
|
D d;
|
|
use(d); // Slice.
|
|
|
|
See the relevant C++ Core Guidelines sections for details:
|
|
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es63-dont-slice
|
|
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c145-access-polymorphic-objects-through-pointers-and-references
|