(en.wikipedia.org) Resource acquisition is initialization - Wikipedia

ROAM_REFS: https://en.wikipedia.org/wiki/Resource_acquisition_is_initialization

Resource acquisition is initialization (RAII) is a programming idiom used in several object-oriented, statically typed programming languages to describe a particular language behavior. In RAII, holding a resource is a class invariant, and is tied to object lifetime. Resource allocation (or acquisition) is done during object creation (specifically initialization), by the constructor, while resource deallocation (release) is done during object destruction (specifically finalization), by the destructor. In other words, resource acquisition must succeed for initialization to succeed. Thus, the resource is guaranteed to be held between when initialization finishes and finalization starts (holding the resources is a class invariant), and to be held only when the object is alive. Thus, if there are no object leaks, there are no resource leaks.

RAII is associated most prominently with C++, where it originated, but also Ada, Vala, and Rust. The technique was developed for exception-safe resource management in C++ during 1984–1989, primarily by Bjarne Stroustrup and Andrew Koenig, and the term itself was coined by Stroustrup.

Other names for this idiom include Constructor Acquires, Destructor Releases (CADRe) and one particular style of use is called Scope-based Resource Management (SBRM). This latter term is for the special case of automatic variables. RAII ties resources to object lifetime, which may not coincide with entry and exit of a scope. (Notably variables allocated on the free store have lifetimes unrelated to any given scope.) However, using RAII for automatic variables (SBRM) is the most common use case.

Local Graph

org-roam 50722fd9-a5bf-4cc0-80e2-2360bd28230e (en.wikipedia.org) Resource acquisiti... //en.wikipedia.org/wiki/Programming_idiom https://en.wikipedia.org/wiki/Programming_idiom 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/Programming_idiom //en.wikipedia.org/wiki/Object-oriented_programming https://en.wikipedia.org/wiki/Object-oriented_programming 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/Object-oriented_programming //en.wikipedia.org/wiki/Statically-typed_programming_language https://en.wikipedia.org/wiki/Statically-typed_programming_language 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/Statically-typed_programming_language //en.wikipedia.org/wiki/Class_invariant https://en.wikipedia.org/wiki/Class_invariant 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/Class_invariant //en.wikipedia.org/wiki/Object_lifetime https://en.wikipedia.org/wiki/Object_lifetime 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/Object_lifetime //en.wikipedia.org/wiki/Resource_allocation_(computer) https://en.wikipedia.org/wiki/Resource_allocation_(computer) 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/Resource_allocation_(computer) //en.wikipedia.org/wiki/Constructor_(object-oriented_programming) https://en.wikipedia.org/wiki/Constructor_(object-oriented_programming) 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/Constructor_(object-oriented_programming) //en.wikipedia.org/wiki/Destructor_(computer_programming) https://en.wikipedia.org/wiki/Destructor_(computer_programming) 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/Destructor_(computer_programming) //en.wikipedia.org/wiki/Resource_leak https://en.wikipedia.org/wiki/Resource_leak 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/Resource_leak //en.wikipedia.org/wiki/C++ https://en.wikipedia.org/wiki/C++ 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/C++ //en.wikipedia.org/wiki/Ada_(programming_language) https://en.wikipedia.org/wiki/Ada_(programming_language) 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/Ada_(programming_language) //en.wikipedia.org/wiki/Vala_(programming_language) https://en.wikipedia.org/wiki/Vala_(programming_language) 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/Vala_(programming_language) //en.wikipedia.org/wiki/Rust_(programming_language) https://en.wikipedia.org/wiki/Rust_(programming_language) 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/Rust_(programming_language) //en.wikipedia.org/wiki/Exception_safety https://en.wikipedia.org/wiki/Exception_safety 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/Exception_safety //en.wikipedia.org/wiki/Resource_management_(computing) https://en.wikipedia.org/wiki/Resource_management_(computing) 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/Resource_management_(computing) //en.wikipedia.org/wiki/Bjarne_Stroustrup https://en.wikipedia.org/wiki/Bjarne_Stroustrup 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/Bjarne_Stroustrup //en.wikipedia.org/wiki/Andrew_Koenig_(programmer) https://en.wikipedia.org/wiki/Andrew_Koenig_(programmer) 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/Andrew_Koenig_(programmer) //en.wikipedia.org/wiki/Automatic_variable https://en.wikipedia.org/wiki/Automatic_variable 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/Automatic_variable //en.wikipedia.org/wiki/Heap_(programming) https://en.wikipedia.org/wiki/Heap_(programming) 50722fd9-a5bf-4cc0-80e2-2360bd28230e->//en.wikipedia.org/wiki/Heap_(programming)