Владение было передано unique_ptr
auptr
, и освобождение теперь является обязанностью unique_ptr
.
. Вы можете проверить, выделяется ли выделенная память также с помощьюнекоторые изменения в вашей программе.
#include <iostream>
#include <memory>
struct Int {
Int() { std::cout << "Int...\n"; }
~Int() { std::cout << "~Int...\n"; }
};
struct D {
void operator() (Int* p) {
std::cout << "Calling delete for Int object... \n";
std::cout << "Deleting at " << p << '\n';
delete p;
}
};
int main()
{
std::cout << "Creating new Int...\n";
Int* i = new Int();
std::cout << "Created at " << i << '\n';
std::unique_ptr<Int, D> UPInt;
UPInt.reset(i);
}
Вывод:
Creating new Int...
Int...
Created at 0x234ec30
Calling delete for Int object...
Deleting at 0x234ec30
~Int...
Вы видите, что объект, созданный в определенном месте, также удаляется.
См. DEMO