C Cpp — Cheat Sheet

Tag: c, cpp, pointers, memory-management, oop, compilation

Livello: base

TL;DR: Sintesi rapida sui concetti fondamentali e le differenze principali tra C e C++, utile per un ripasso veloce prima di un colloquio tecnico.[cite: 2]

Concetti chiave

  • C è un linguaggio procedurale, C++ supporta nativamente la programmazione orientata agli oggetti (OOP).
  • In C l'allocazione dinamica della memoria si gestisce con malloc/free, in C++ si preferiscono new/delete.
  • I puntatori (*) indicano indirizzi di memoria; le reference (&) in C++ creano alias più sicuri e meno proni a errori.
  • Il C non supporta il function overloading o il namespace, concetti introdotti nativamente nel C++.
  • La Standard Template Library (STL) in C++ offre strutture dati (es. std::vector, std::map) e algoritmi predefiniti non presenti in C.

Domande tipiche e risposte pronte

  • Q: Qual è la differenza principale tra malloc e new?

R: malloc alloca solo blocchi di memoria grezza e restituisce un void*, mentre new alloca memoria, chiama il costruttore dell'oggetto e restituisce un puntatore tipizzato.

  • Q: A cosa serve la parola chiave virtual in C++?

R: Serve a definire metodi nelle classi base che possono essere sovrascritti (overriding) nelle classi derivate, permettendo il polimorfismo a runtime.

  • Q: Cos'è un memory leak e come si previene in C++?

R: Si verifica quando la memoria allocata dinamicamente non viene deallocata. In C++ si previene utilizzando gli smart pointer (std::unique_ptr, std::shared_ptr) introdotti col C++11.

Insidie e errori comuni

  • Dimenticare di liberare la memoria allocata manualmente (causando memory leaks).
  • Utilizzare puntatori "dangling" (puntatori che riferiscono a un'area di memoria già liberata).
  • Confondere il passaggio di parametri per valore e per reference/puntatore, causando inefficienze o mancate modifiche.
  • In C++, dimenticarsi di dichiarare un distruttore virtual in una classe base polimorfica.

Snippet e comandi

// Esempio C++ di classe semplice
#include <iostream>
#include <string>

class Persona {
private:
    std::string nome;
public:
    Persona(std::string n) : nome(n) {}
    void saluta() {
        std::cout << "Ciao, sono " << nome << std::endl;
    }
};

int main() {
    Persona p("Umberto");
    p.saluta();
    return 0;
}

Da ripassare

[ ] Gestione manuale della memoria (differenze tra stack e heap).

[ ] Regola del tre / cinque / zero in C++.

[ ] Smart pointers in C++11.

Jarvis Interviews
Jarvis