std::unique_ptr::reset
Aus cppreference.com
<metanoindex/>
<tbody> </tbody> void reset( pointer ptr = pointer() ); |
(seit C++11) | |
Replaces the managed object.
Given current_ptr, the pointer that was managed by *this, performs the following actions, in this order:
- Saves a copy of the current pointer
old_ptr = current_ptr - Overwrites the current pointer with the argument
current_ptr = ptr - If the old pointer was non-empty, deletes the previously managed object
if(old_ptr != nullptr) get_deleter()(old_ptr).
Parameter
| ptr | - | pointer to a new object to manage |
Rückgabewert
(None)
Original:
(none)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Notes
To replace the managed object while supplying a new deleter as well, move assignment operator may be used.
A test for self-reset, i.e. whether ptr points to an object already managed by *this, is not performed, except where provided as a compiler extension or as a debugging assert. Note that code such as p.reset(p.release()) does not involve self-reset, only code like p.reset(p.get()) does.
Beispiel
#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);
}
Output:
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...
