void
reset() noexcept; // (1) C++11
constexpr void
reset() noexcept; // (1) C++26
template <class Y>
void
reset(Y* p); // (2) C++11
template <class Y>
constexpr void
reset(Y* p); // (2) C++26
template <class Y,
class Deleter>
void
reset(Y* p,
Deleter d); // (3) C++11
template <class Y,
class Deleter>
constexpr void
reset(Y* p,
Deleter d); // (3) C++26
template <class Y,
class Deleter,
class Allocator>
void
reset(Y* p,
Deleter d,
Allocator a); // (4) C++11
template <class Y,
class Deleter,
class Allocator>
constexpr void
reset(Y* p,
Deleter d,
Allocator a); // (4) C++26
概要
リソースの所有権を放棄し、新たなリソースの所有権を設定する。
効果
- (1) :
shared_ptr().swap(*this) - (2) :
shared_ptr(p).swap(*this) - (3) :
shared_ptr(p, d).swap(*this) - (4) :
shared_ptr(p, d, a).swap(*this)
戻り値
なし
例
#include <memory>
int main()
{
std::shared_ptr<int> p1(new int(3));
std::shared_ptr<int> q1 = p1;
// (1)
// p1が共有している所有権を放棄する。
// q1がまだ所有権を持っているので、リソースは解放されない。
p1.reset();
std::shared_ptr<int> p2(new int(3));
std::shared_ptr<int> q2 = p2;
// (2)
// p2が現在共有している所有権を放棄し、新たなリソースの所有権を設定する。
// p2とq2がそれぞれ、異なるリソースを所有することになる。
p2.reset(new int(2));
}
出力
バージョン
言語
- C++11
処理系
- GCC: 4.3.6 ✅
- Clang: 3.0 ✅
- ICC: ?
- Visual C++: 2008 (TR1) ✅, 2010 ✅, 2012 ✅, 2013 ✅