跳到主要内容

std::shared_ptr<T>::~shared_ptr

~shared_ptr();

如果 *this 拥有一个对象,并且它是最后一个拥有该对象的 shared_ptr,则该对象将通过其拥有的删除器进行销毁。

销毁之后,与 *this 共享所有权的智能指针(如果有)将报告其 use_count() 比之前的值少一。

备注

std::unique_ptr 不同,即使被管理的指针是 nullstd::shared_ptr 的删除器也会被调用。

示例

#include <memory>
#include <iostream>

struct S {
S() { std::cout << "S::S()\n"; }
~S() { std::cout << "S::~S()\n"; }
struct Deleter {
void operator()(S* s) const {
std::cout << "S::Deleter()\n";
delete s;
}
};
};

int main()
{
auto sp = std::shared_ptr<S>{ new S, S::Deleter{} };

auto use_count = [&sp](char c) {
std::cout
<< c << ") use_count(): "
<< sp.use_count() << '\n';
};

use_count('A');
{
auto sp2 = sp;
use_count('B');
{
auto sp3 = sp;
use_count('C');
}
use_count('D');
}
use_count('E');

// sp.reset();
// use_count('F'); // would print "F) use_count(): 0"
}
结果
S::S()
A) use_count(): 1
B) use_count(): 2
C) use_count(): 3
D) use_count(): 2
E) use_count(): 1
S::Deleter()
S::~S()

std::shared_ptr<T>::~shared_ptr

~shared_ptr();

如果 *this 拥有一个对象,并且它是最后一个拥有该对象的 shared_ptr,则该对象将通过其拥有的删除器进行销毁。

销毁之后,与 *this 共享所有权的智能指针(如果有)将报告其 use_count() 比之前的值少一。

备注

std::unique_ptr 不同,即使被管理的指针是 nullstd::shared_ptr 的删除器也会被调用。

示例

#include <memory>
#include <iostream>

struct S {
S() { std::cout << "S::S()\n"; }
~S() { std::cout << "S::~S()\n"; }
struct Deleter {
void operator()(S* s) const {
std::cout << "S::Deleter()\n";
delete s;
}
};
};

int main()
{
auto sp = std::shared_ptr<S>{ new S, S::Deleter{} };

auto use_count = [&sp](char c) {
std::cout
<< c << ") use_count(): "
<< sp.use_count() << '\n';
};

use_count('A');
{
auto sp2 = sp;
use_count('B');
{
auto sp3 = sp;
use_count('C');
}
use_count('D');
}
use_count('E');

// sp.reset();
// use_count('F'); // would print "F) use_count(): 0"
}
结果
S::S()
A) use_count(): 1
B) use_count(): 2
C) use_count(): 3
D) use_count(): 2
E) use_count(): 1
S::Deleter()
S::~S()