Articles of c ++ faq

Come impedire che una class venga allocata tramite l’operatore ‘nuovo’? (Mi piacerebbe assicurarmi che la mia class RAII sia sempre allocata nello stack.)

Mi piacerebbe assicurarmi che la mia class RAII sia sempre allocata nello stack. Come impedire che una class venga allocata tramite l’operatore ‘nuovo’?

Domande frequenti: perché dynamic_cast funziona solo se una class ha almeno un metodo virtuale?

Questo non si compila in C ++: class A { }; class B : public A { }; … A *a = new B(); B *b = dynamic_cast(a);

Motivazione di far rispettare alcuni operatori per essere membri

Ci sono 4 operatori in C ++ che possono essere sovraccaricati ma non possono essere sovraccaricati come funzioni indipendenti (anche non membri, standalone). Questi operatori sono: operator = operator () operator -> operator [] Questo thread spiega perfettamente la logica alla base del divieto operator = di essere una funzione non membro. Qualche idea sugli […]

Qual è il significato di * e & se applicato ai nomi delle variabili?

In C ++, qual è la differenza tra: void func(MyType&); // declaration //… MyType * ptr; func(*ptr); // compiler doesnt give error func(ptr); // compiler gives error i thought & represents memory address so // this statement should correct as ptr is only a pointer // or address of some real var.

Perché abbiamo effettivamente bisogno di ereditarietà privata o protetta in C ++?

In C ++, non posso pensare a un caso in cui vorrei ereditare privato / protetto da una class base: class Base; class Derived1 : private Base; class Derived2 : protected Base; È davvero utile?

Spiega C ++ SFINAE in un programmatore non C ++

Cos’è SFINAE in C ++? Puoi spiegarlo in parole comprensibili a un programmatore che non è esperto in C ++? Inoltre, quale concetto in una lingua come Python corrisponde a SFINAE?

Passando i puntatori condivisi come argomenti

Se dichiaro un object racchiuso in un puntatore condiviso: std::shared_ptr myClassObject(new myClass()); quindi volevo passarlo come argomento a un metodo: DoSomething(myClassObject); //the called method void DoSomething(std::shared_ptr arg1) { arg1->someField = 4; } Quanto sopra semplicemente incrementa il conteggio dei riferimenti di shared_pt e tutto è bello? O lascia un puntatore ciondolante? Dovresti ancora farlo ?: […]

Dovrei includere o nei programmi C ++?

Cosa dovrei includere nei programmi C ++, stdio.h o cstdio ? e perché? Perché due file di intestazione che forniscono la stessa funzionalità? Cosa dice lo standard in merito? Come dovrei andare a includere altre intestazioni di questo tipo? C’è una regola base che dovrei seguire?

Std :: list :: remove metodo call destroyer di ogni elemento rimosso?

std::list lst; //…. Node * node = /* get from somewhere pointer on my node */; lst.remove(node); Std :: list :: remove metodo call destroyer (e memoria libera) di ogni elemento rimosso? Se sì, come posso evitarlo?

Perché `std :: move` ha il nome` std :: move`?

La funzione std::move(x) C ++ 11 non sposta affatto nulla. È solo un cast di valore-r. Perché è stato fatto? Non è fuorviante?