In C++, an object's life doesn't always start when memory is allocated. This guide explores the subtle rules that prevent dangling pointers and undefined behavior.
#1about 3 minutes
Defining objects and lifetimes in C++
An object is a region of storage with a type and value, and its lifetime is a property on the abstract machine that dictates when it can be safely manipulated.
#2about 5 minutes
Creating objects with variable declarations and storage duration
Objects created by variable definitions have their lifetime influenced by their storage duration (automatic, static, or thread), which is distinct from the object's actual lifetime that begins after initialization.
#3about 5 minutes
Understanding temporary objects and lifetime extension rules
Temporary objects are created for prvalues and are usually destroyed at the end of an expression, but their lifetime can be extended when bound directly to a reference or used in a range-based for loop.
#4about 5 minutes
Manually creating objects in existing memory with placement new
Placement `new` allows constructing an object in pre-allocated storage, and if the new object is "transparently replaceable," existing pointers and references to the old object remain valid.
#5about 2 minutes
Using std::launder for non-transparent object replacement
When an object replacement is not transparent (e.g., for `const` objects), `std::launder` must be used on old pointers to prevent undefined behavior by forcing the compiler to acknowledge the new object in that storage.
#6about 5 minutes
Implicit object creation and std::start_lifetime_as
Certain operations like `malloc` can implicitly create objects to make C-style code valid, and `std::start_lifetime_as` should be used to correctly begin the lifetime of an object in a raw byte buffer.
#7about 2 minutes
Implicit destruction and best practices for object lifetime
Reusing storage with placement `new` implicitly destroys the previous object, and best practices include explicit object creation and using the newly returned pointer to avoid aliasing issues.
Related jobs
Jobs that call for the skills explored in this talk.
Matching moments
07:25 MIN
Core design principles and the language evolution trilemma
The Design and Evolution of C++
06:01 MIN
Why temporary lifetime extension fails in modern C++
The C++ rvalue lifetime disaster
06:50 MIN
C++ availability, ecosystem, and backwards compatibility
101 brilliant things of C++
03:21 MIN
The dual role of rvalue references in C++
The C++ rvalue lifetime disaster
03:44 MIN
How Java and Go emerged to address C++ limitations
Eternal Sunshine of the Spotless Programming Language
01:19 MIN
How objects become garbage through reachability
Trash Talk - Exploring the memory management in the JVM
02:20 MIN
Understanding the original design goals and evolution of C++
Eternal Sunshine of the Spotless Programming Language
02:59 MIN
Practical mitigations for rvalue lifetime issues today
All the videos of Halfstack London 2024!Last month was Halfstack London, a conference about the web, JavaScript and half a dozen other things. We were there to deliver a talk, but also to record all the sessions and we're happy to share them with you. It took a bit as we had to wait for th...
Daniel Cranney
What does the history of data storage tell us about the future?In the rapidly advancing world of computing, data storage stands as a cornerstone that has evolved profoundly over the decades, adapting to meet growing demands for durability, scalability, and accessibility. From early physical storage methods to to...
Dev Digest 128 - Do not Google MonopolyHello fellow developer, who watches the watchmen and what is a monopoly? Well, let's find out and learn a few things about new web features and accessibility along the way.News and ArticlesIt is official that Google has monopolised search through ill...