C++ Academy · leksjon

Objektets levetid

Når objekter opprettes og ødelegges

Leksjon 3 av 413 trinn

Objektets levetid er en gratis leksjon i C++ Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C++ Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C++ Academy inneholder totalt 4 leksjoner.

Når objekter opprettes

Et objekts levetid begynner etter at lagringsplassen er allokert og konstruktøren er ferdig. Fra dette tidspunktet kan objektet brukes fullt ut.

#include <iostream>

struct Widget {
    Widget() { std::cout << "born\n"; }
};

int main() {
    Widget w;   // constructor runs here
}

Når objekter ødelegges

Levetiden avsluttes når destruktøren kjører. For et stack-objekt skjer dette ved den avsluttende krøllparentesen til scopet.

#include <iostream>

struct Widget {
    ~Widget() { std::cout << "dies\n"; }
};

int main() {
    Widget w;
    std::cout << "alive\n";
}   // ~Widget runs here

Rekkefølge for konstruksjon og destruksjon

Objekter ødelegges i omvendt rekkefølge av konstruksjonen. Det siste objektet som ble opprettet, tas ned først.

#include <iostream>

struct Tag {
    int id;
    Tag(int i) : id(i) { std::cout << "make " << id << "\n"; }
    ~Tag() { std::cout << "drop " << id << "\n"; }
};

int main() {
    Tag a(1);
    Tag b(2);   // dropped before a
}

Automatisk levetid (stack)

Automatiske objekter lever så lenge den omsluttende blokken varer. Dette er den vanligste og sikreste modellen for levetid.

Dynamisk levetid (heap)

Heap-objekter som opprettes med new, lever til delete kalles – levetiden deres styres av Dem, ikke av scopet.

#include <iostream>

struct Widget {
    ~Widget() { std::cout << "dies\n"; }
};

int main() {
    Widget* w = new Widget();
    std::cout << "still alive\n";
    delete w;   // destructor runs here
}

Statisk levetid

Objekter med static-lagring lever gjennom hele programmet. En funksjonslokal static konstrueres første gang den brukes.

#include <iostream>

int next() {
    static int counter = 0;   // built once
    return ++counter;
}

int main() {
    std::cout << next() << next() << next() << "\n";
}

Midlertidige objekter

Et midlertidig objekt som opprettes i et uttrykk, ødelegges vanligvis ved slutten av hele uttrykket (semikolonet).

#include <iostream>
#include <string>

int main() {
    std::cout << (std::string("a") + "b") << "\n";
}   // temporary string dies after this line

Medlemmer konstrueres før kroppen

Medlemsobjektene i en klasse konstrueres før konstruktørkroppen til det omsluttende objektet kjører, og ødelegges etter destruktørkroppen.

#include <iostream>
#include <string>

struct Engine { Engine() { std::cout << "engine\n"; } };
struct Car {
    Engine e;
    Car() { std::cout << "car\n"; }
};

int main() { Car c; }

Forlenget levetid med const-referanse

Hvis et midlertidig objekt bindes til en const&, forlenges levetiden slik at den samsvarer med referansen – en nyttig C++-regel.

#include <iostream>
#include <string>

int main() {
    const std::string& s = std::string("hi");
    std::cout << s << "\n";   // s still valid
}

Bruk etter avsluttet levetid

Å berøre et objekt etter at levetiden er avsluttet, gir udefinert oppførsel – den klassiske feilen med hengende referanse eller use-after-free.

Levetid danner grunnlaget for RAII

Fordi destruktører kjører deterministisk ved slutten av levetiden, knytter C++ ressursopprydding til levetid – grunnlaget for RAII, som gjennomgås i neste kurs.

Hurtigsjekk

Test forståelsen av objekters levetid.

Oppsummering

De har lært hvordan et objekts levetid begynner etter konstruksjonen og avsluttes ved destruksjon. Automatiske objekter følger scope, dynamiske objekter følger new/delete, og statiske objekter varer gjennom hele programmet. Destruksjon skjer i omvendt rekkefølge – grunnlaget for RAII.

Gratis å komme i gang

Lær deg C++ med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
51
Leksjoner
203

Ofte stilte spørsmål

Er leksjonen «Objektets levetid» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien C++ Academy, inkludert «Objektets levetid», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i C++ Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Objektets levetid»?

Når objekter opprettes og ødelegges Du øver på C++ Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med C++ Academy?

Ingen tidligere erfaring er nødvendig. C++ Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Objektets levetid»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne C++ Academy-leksjonen?

Ja. Alle C++ Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Stakkallokering
  2. Heap-allokering med new/delete
  3. Objektets levetid
  4. Vanlige minnefeil
← Tilbake til C++ Academy