Modernes C++ programmieren

Okt 23, 2024

lst-1003-book.cpp

// https://godbolt.org/z/j5Y15Esx7 
// … includes …
#include <thread>
using namespace std::chrono; // seconds, suffix s
struct Image {
    std::vector<char> data_; // Kopie teuer
    explicit Image() : data_(1'000'000) {}
};
void zeigeImage(Image img) {
    std::cout << img.data_.size() << '\n';
}
void zeigeIptr(std::unique_ptr<int> iptr) {
    std::cout << *iptr << '\n';
}
int main() {
    // teuer zu kopieren, aber dafür gut zu verschieben:
    Image image{};
    std::cout << image.data_.size() << std::endl;    // Ausgabe: 1000000
    std::jthread th1{ zeigeImage, std::move(image) };// Ausgabe: 1000000
    std::this_thread::sleep_for(1s);
    std::cout << image.data_.size() << std::endl;    // Ausgabe: 0
    th1.join();  // explizit warten, bis der Thread fertig ist
    // unmöglich zu kopieren, aber gut zu verschieben:
    auto iptr = std::make_unique<int>( 657 );
    std::cout << (bool)iptr << std::endl;            // Ausgabe: 1 für wahr
    std::jthread th2{ zeigeIptr, std::move(iptr) };  // Ausgabe: 657
    std::this_thread::sleep_for(1s);
    std::cout << (bool)iptr.get() << std::endl;      // Ausgabe: 0 für falsch
}