Namespaces
Variants

std::unique_ptr<T,Deleter>:: release

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
pointer release ( ) noexcept ;
(depuis C++11)
(constexpr depuis C++23)

Libère la propriété de l'objet géré, s'il y en a un.

get() renvoie nullptr après l'appel.

L'appelant est responsable du nettoyage de l'objet (par exemple via l'utilisation de get_deleter() ).

Table des matières

Paramètres

(aucun)

Valeur de retour

Pointeur vers l'objet géré ou nullptr s'il n'y avait pas d'objet géré, c'est-à-dire la valeur qui serait retournée par get() avant l'appel.

Exemple

#include <cassert>
#include <iostream>
#include <memory>
struct Foo
{
    Foo() { std::cout << "Foo\n"; }
    ~Foo() { std::cout << "~Foo\n"; }
};
// La propriété de la ressource Foo est transférée lors de l'appel de cette fonction
void legacy_api(Foo* owning_foo)
{
    std::cout << __func__ << '\n';
    // [code legacy que personne ne comprend ou n'ose plus modifier]
    // [...]
    delete owning_foo;
}
int main()
{
    std::unique_ptr<Foo> managed_foo(new Foo);
    // [code qui pourrait retourner ou lever une exception ou autre]
    // [...]
    legacy_api(managed_foo.release());
    assert(managed_foo == nullptr);
}

Sortie :

Foo
legacy_api
~Foo

Voir aussi

renvoie un pointeur vers l'objet géré
(fonction membre publique)
renvoie le suppresseur utilisé pour la destruction de l'objet géré
(fonction membre publique)
remplace l'objet géré
(fonction membre publique)