Na czym polegają sytuacje wyjątkowe w C++ i jak sobie z nimi radzić?
Jakich problemów z pamięcią możemy się spodziewać i jak je wykrywać?
Klucz do dobrego programowania w C++
Jak działają programy, skąd bierze się w nich pamięć i jak jest podzielona?
Dlaczego są takie inteligentne i jak z nich korzystać?
Trochę więdzy eksperckiej, aby zwalić rekruterów z nóg
/*
* RAII wrapper for raw pointers to FILE
* Remember to implement Rule of 5
*/
class FileHandler {
FILE* fp_;
public:
FileHandler(std::string filename)
: fp_ { std::fopen(filename.c_str(), "r") }
{
if (!fp_) {
throw FileOpeningError{filename};
}
}
FileHandler(const char* filename)
: fp_ { std::fopen(filename, "r") }
{
if (!fp_) {
throw FileOpeningError{filename};
}
}
~FileHandler() {
std::fclose(fp_);
}
friend std::ostream& operator<<(std::ostream& os, const FileHandler& fh);
};
#include
#include
#include
class Parent {
public:
Parent() { std::cout << "PARENT C'tor called\n"; }
virtual ~Parent() { std::cout << "PARENT D'tor called\n"; }
};
class Child : public Parent {
public:
Child() { std::cout << "CHILD C'tor called\n"; }
~Child() override { std::cout << "CHILD D'tor called\n"; }
};
int main() {
Child child; // ok, object on stack, not a pointer
std::cout << '\n';
std::unique_ptr child2 = std::make_unique();
std::cout << '\n';
std::shared_ptr child3 = std::make_shared();
std::cout << '\n';
Parent* ptr = new Child{};
delete ptr;
std::cout << '\n';
}
#include
#include
class Gadget {};
void f(const Gadget&) { std::cout << "const Gadget&\n"; }
void f(Gadget&) { std::cout << "Gadget&\n"; }
void f(Gadget&&) { std::cout << "Gadget&&\n"; }
template
void use(T&& t) {
f(std::forward(t));
}
int main() {
const Gadget cg;
Gadget g;
use(cg); // calls use(const Gadget&) then calls f(const Gadget&)
use(g); // calls use(Gadget&) then calls f(Gadget&)
use(Gadget{}); // calls use(Gadget&&) then calls f(Gadget&&)
}
Krótkie kilkuminutowe lekcje pozwolą Ci skubnąć trochę wiedzy w każdej wolnej chwili
Dzięki nim w praktyce przećwiczysz poznaną teorię
Poznasz najważniejsze narzędzia, które ułatwią Ci pracę
Na Discordzie porozmawiasz z trenerem i innymi kursantami. Możesz pytać o wszystko związane z C++
Możesz powrócić do szkolenia nawet za kilka lat
Na bieżąco czuwamy nad materiałami. Jeśli coś się zmieni lub nagramy nowe wideo, to dostaniesz je gratis
Błyskawicznie dowiesz się, czy Twoje rozwiązania przechodzą nasze testy. Zawsze też możesz porozmawiać o nich na czacie
Jeśli kurs Ci się nie spodoba, to w ciągu 21 dni możesz go zwrócić. Wystarczy jeden email
* Znasz podstawy C++
* Wiesz na czym polega programowanie obiektowe
* Potrafisz pisać własne klasy
* Wiesz czym są wskaźniki, ale może nie do końca je rozumiesz lub nie potrafisz ich używać
* Chcesz poznać inteligentne wskaźniki, czyli automatyczny sposób zarządzania pamięcią w C++
* Znasz język C, ale już wiesz, że w C++ inaczej podchodzi się do tematu wskaźników
* Masz dość ciągłych "segmantation fault" i "błędów ochrony pamięci"
* Chcesz wiedzieć jak poprawnie zarządzać pamięcią
* Chcesz wiedzieć czego używać do zarządzania plikami, gniazdkami sieciowymi, muteksami, aby programy nie miały bugów
* Nie masz pojęcia czym jest wskaźnik w C++
* Nie wiesz jak napisać kalkulator w C++
* Pamięć Ci nie szwankuje 😉
Jeśli nie rozwialiśmy Twoich wątpliwości, to przetestuj ten kurs. Kup go, a jeśli okaże się, że nie jest on dla Ciebie, to zwróć go w ciągu 21 dni po zakupie. Żadnych dodatkowych pytań i formalności. Wystarczy jeden email.
unique_ptr
i shared_ptr
21-dniowa gwarancja satysfakcji oznacza, że możesz zwrócić kurs z dowolnego powodu, np. aberracji stratosferycznych nad biegunem południowym. Możesz też nie podawać w ogóle powodu, ale będzie nam miło wiedzieć czy nie spełnił on oczekiwań, czy to jakaś sytuacja osobista.
Zostaw swój email i zapisz się na newsletter. Dostaniesz dostęp do kilkunastu darmowych lekcji z różnych modułów.