0Pricing
C++ Academy · Lekcja

Cykl życia obiektu

Dowiedz się, kiedy obiekty są tworzone i niszczone

Cykl życia obiektu to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.

Kiedy powstają obiekty

Czas życia obiektu rozpoczyna się po zaalokowaniu dla niego pamięci i zakończeniu jego konstruktora. Od tego momentu obiekt jest w pełni użyteczny.

#include <iostream>

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

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

Kiedy obiekty umierają

Czas życia kończy się w chwili wykonania destruktora. W przypadku obiektu stosu następuje to przy zamykającej klamrze jego zakresu.

#include <iostream>

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

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

Kolejność konstrukcji i destrukcji

Obiekty są niszczone w odwrotnej kolejności do kolejności ich konstruowania. Ostatni utworzony obiekt jest niszczony jako pierwszy.

#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
}

Automatyczny czas życia obiektów na stosie

Obiekty automatyczne żyją przez czas trwania otaczającego ich bloku. Jest to najczęstszy i najbezpieczniejszy model czasu życia.

Dynamiczny czas życia obiektów na stercie

Obiekty na stercie utworzone za pomocą new żyją do chwili wywołania delete — ich czas życia zależy od Ciebie, a nie od zakresu.

#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
}

Czas życia statycznego obiektu

Obiekty o statycznym czasie przechowywania żyją przez cały czas działania programu. Statyczny obiekt lokalny funkcji jest konstruowany raz, przy pierwszym użyciu.

#include <iostream>

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

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

Obiekty tymczasowe

Obiekt tymczasowy utworzony w wyrażeniu zwykle umiera na końcu całego wyrażenia (przy średniku).

#include <iostream>
#include <string>

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

Elementy są konstruowane przed ciałem

Obiekty składowe klasy są konstruowane przed wykonaniem ciała konstruktora obiektu zawierającego klasę i niszczone po wykonaniu ciała jej destruktora.

#include <iostream>
#include <string>

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

int main() { Car c; }

Wydłużenie czasu życia przez referencję const

Powiązanie obiektu tymczasowego z const& wydłuża jego czas życia tak, aby odpowiadał czasowi życia referencji — to przydatna reguła języka C++.

#include <iostream>
#include <string>

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

Użycie po zakończeniu czasu życia

Odwołanie się do obiektu po zakończeniu jego czasu życia prowadzi do niezdefiniowanego działania — to klasyczny błąd zwisającej referencji lub użycia po zwolnieniu.

Czas życia jest podstawą RAII

Ponieważ destruktory są uruchamiane deterministycznie na końcu czasu życia, C++ wiąże zwalnianie zasobów z czasem życia — to podstawa RAII, omówiona w następnym kursie.

Szybki test

Sprawdź swoją wiedzę na temat czasu życia obiektów.

Podsumowanie

Nauczyłeś się, że czas życia obiektu rozpoczyna się po jego skonstruowaniu i kończy wraz z jego zniszczeniem. Obiekty automatyczne podlegają zakresowi, obiekty dynamiczne — parze new/delete, a obiekty statyczne istnieją przez cały czas działania programu. Niszczenie odbywa się w odwrotnej kolejności — to podstawa RAII.

Często zadawane pytania

Czy lekcja „Cykl życia obiektu” jest bezpłatna?

Tak — pełny tekst „Cykl życia obiektu” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Cykl życia obiektu”?

Dowiedz się, kiedy obiekty są tworzone i niszczone Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C++ Academy?

Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Cykl życia obiektu”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?

Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Alokacja na stosie
  2. Alokacja na stercie z new/delete
  3. Cykl życia obiektu
  4. Typowe błędy pamięci
← Powrót do C++ Academy