namespace std {
template <class T>
void
swap(weak_ptr<T>& a, weak_ptr<T>& b) noexcept; // (1) C++11
template <class T>
constexpr void
swap(weak_ptr<T>& a, weak_ptr<T>& b) noexcept; // (1) C++26
}
ę¦č¦
2ć¤ć®weak_ptrćŖććøć§ćÆććå
„ćęæććć
å¹ę
a.swap(b)
ę»ćå¤
ćŖć
ä¾å¤
ęććŖć
ä¾
#include <iostream>
#include <memory>
int main()
{
std::shared_ptr<int> sp1(new int(1));
std::weak_ptr<int> wp1 = sp1;
std::shared_ptr<int> sp2(new int(2));
std::weak_ptr<int> wp2 = sp2;
if (std::shared_ptr<int> r = wp1.lock()) {
std::cout << r << std::endl;
}
if (std::shared_ptr<int> r = wp2.lock()) {
std::cout << r << std::endl;
}
// wp1ćØwp2ćå
„ćęæćć
std::swap(wp1, wp2);
if (std::shared_ptr<int> r = wp1.lock()) {
std::cout << r << std::endl;
}
if (std::shared_ptr<int> r = wp2.lock()) {
std::cout << r << std::endl;
}
}
åŗåä¾
0x14ab010
0x14ab060
0x14ab060
0x14ab010
ćć¼ćøć§ć³
čØčŖ
- C++11
å¦ēē³»
- GCC: 4.3.6 ā
- Clang: 3.0 ā
- Visual C++: ?