C.67: Does a class marked final prevent slicing?
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 30/100
- Tipo di issue
- Documentazione
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- cpp
- Ambito
- documentation
Direzione di ricerca
Inizia con gli esempi C++ adattati dell’issue e leggi le sezioni collegate delle linee guida C.67 e C.20 insieme al materiale di cppreference sui costruttori di copia a cui si fa riferimento. Determina se contrassegnare D come final influisce sullo slicing in g, quindi chiarisci la linea guida o l’esempio in modo da indicare la raccomandazione applicabile e la relativa motivazione.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Consider the following adapted example based on C.67: A polymorphic class should suppress public copy/move (there now is an additional class E derived from D and D does not comply with C.67).
class B { // GOOD: polymorphic class suppresses public copying
public:
B() = default;
virtual char m() { return 'B'; }
protected:
B(const B&) = default;
B& operator=(const B&) = default;
// ...
};
class D : public B { // BAD: polymorphic derived class doesn't suppress public copying
public:
char m() override { return 'D'; }
// No user-defined copy-constructor so according to cppreference (https://en.cppreference.com/w/cpp/language/copy_constructor) the compiler will implicitly generate a public copy constructor
// ...
};
class E : public D {
public:
char m() override { return 'E'; }
// ...
};
void f(B& b)
{
auto b2 = b; // ok, compiler will detect inadvertent copying, and protest
}
void g(D& d)
{
auto d2 = d; // oops, slices the object; d2.m() will return 'D'
}
E e;
g(e);
To my understanding, D is a polymorphic class in terms of C.67 as it inherits a virtual function. Slicing obviously occurs due to D not complying with C.67.
My question now is, what if there should not be any classes derived from D in the first place? I.e. D being introduced in the following way:
class D final : public B { // QUESTION: does final prevent slicing in function g?
public:
char m() override { return 'D'; }
// No user-defined copy-constructor so according to cppreference the compiler will implicitly generate a public copy constructor
// ...
};
Is it sound to mark D final and keep the implicitly generated public copy constructor (i.e. apply C.20: If you can avoid defining default operations, do in this case)? Or can this still lead to slicing in function g?
- Lingua principale
- CSS
- Stelle
- 45.3k
- Fork
- 5.6k
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di isocpp/CppCoreGuidelines
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 75/100
isocpp/CppCoreGuidelines#2338 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
isocpp/CppCoreGuidelines#2205 · 8 commenti ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 64/100
isocpp/CppCoreGuidelines#1649 · 3 commenti ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 42/100
isocpp/CppCoreGuidelines#2336 · 4 commenti ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
isocpp/CppCoreGuidelines#2335 · 2 commenti ·
Tutte le issue di isocpp/CppCoreGuidelines
Issue simili
-
https://search.utilibre.orgApertainstance instance add
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
searxng/searx-instances#941 · 1 commento ·
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
radius-project/ai-extensions#923 ·
I maintainer di solito rispondono entro 1 giorno
-
area: cli area: docs bug difficulty:2 help wanted S4: cosmetic
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
manaflow-ai/cmux#15710 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
FluidNumerics/fluid-walk-blocker#89 ·
I maintainer di solito rispondono entro 1 giorno
-
:watch: Not Triaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno