std::unique_ptr::reset
De cppreference.com
<tbody>
</tbody>
void reset( pointer ptr = pointer() ); |
(depuis C++11) | |
Remplace l'objet géré.
Effectue les actions suivantes dans cet ordre, en notant current_ptr le pointeur courant géré par *this:
- Une copie du pointeur courant
old_ptr = current_ptr; - Le remplacement du pointeur courant par l'argument
current_ptr = ptr; - Si le pointeur précédent était non nul, la destruction de l'objet précédemment géré
if(old_ptr != nullptr) get_deleter()(old_ptr).
Paramètres
| ptr | - | pointeur sur un nouvel objet à gérer |
Retourne la valeur
(Aucune)
Notes
Pour remplacer l'objet géré tout en fournissant un nouveau deleter, l'opérateur d'affectation-déplacement (move assignment) peut être utilisé.
L'auto-reset, c'est-à-dire si ptr pointe sur l'objet déjà géré par *this, n'est pas testé, sauf s'il est prévu comme extension du compilateur ou assertion de débogage. Notez que le code p.reset(p.release()) n'est pas un auto-reset ; mais p.reset(p.get()) l'est.
Exemple
#include <iostream>
#include <memory>
struct Foo {
Foo() { std::cout << "Foo...\n"; }
~Foo() { std::cout << "~Foo...\n"; }
};
struct D {
void operator() (Foo* p) {
std::cout << "Calling delete for Foo object... \n";
delete p;
}
};
int main()
{
std::cout << "Creating new Foo...\n";
std::unique_ptr<Foo, D> up(new Foo(), D()); // up owns the Foo pointer (deleter D)
std::cout << "Replace owned Foo with a new Foo...\n";
up.reset(new Foo()); // calls deleter for the old one
std::cout << "Release and delete the owned Foo...\n";
up.reset(nullptr);
}
Résultat :
Creating new Foo...
Foo...
Replace owned Foo with a new Foo...
Foo...
Calling delete for Foo object...
~Foo...
Release and delete the owned Foo...
Calling delete for Foo object...
~Foo...
Voir aussi
renvoie un pointeur sur l'objet géré et libère la propriété Original: returns a pointer to the managed object and releases the ownership The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (fonction membre publique) | |