~shared_ptr(); // (1) C++11
constexpr ~shared_ptr(); // (1) C++26
shared_ptrćŖććøć§ćÆćć®ē “ę£
čŖčŗ«ć®ćæćęę権ćęć¤å “åć«ććŖć½ć¼ć¹ćč§£ę¾ććć
å¹ę
ä»ć®shared_ptrćŖććøć§ćÆććØćŖć½ć¼ć¹ćå
±ęćć¦ććå “å(use_count() > 1)ćå¹ęćŖćć
čŖčŗ«ć®ćæćshared_ptrćŖććøć§ćÆćć®ćŖć½ć¼ć¹ćęęćć¦ććå “åćć³ć³ć¹ćć©ćÆćæć代å
„ę¼ē®åćreset()ć”ć³ćé¢ę°ć§ä»£å
„ćććY*åć®ćć¤ć³ćæpć«ć¤ćć¦ć
- ććŖć¼ćæćęć£ć¦ććć°
d(p)ć§ćŖć½ć¼ć¹ćč§£ę¾ććć - ććŖć¼ćæćęć£ć¦ććŖććć°ć
delete pć§ćŖć½ć¼ć¹ćč§£ę¾ććć
pćT*åć§ćÆćŖćY*åć§ććććØć«ę³Øęćććć«ćććshared_ptr<void>ć«åƾćć¦ä»»ęć®åYć®ćŖććøć§ćÆććøć®ćć¤ć³ćæć代å
„ćććØćć¦ććYåć®ćć¹ćć©ćÆćæćę£ććå®č”ćććć
åč
å®éć«ćÆshared_ptrćÆåē
§ć«ć¦ć³ćć§å®č£
ććććććä»ć®shared_ptrćŖććøć§ćÆććØęę権ćå
±ęćć¦ććē¶ę
ć§ćć¹ćć©ćÆćæćå®č”ćććå “åćåē
§ć«ć¦ć³ćć1ęøććććØććććØćč”ćć
ä¾
#include <iostream>
#include <memory>
struct X {
~X()
{
std::cout << "X dtor" << std::endl;
}
};
struct Y {
~Y()
{
std::cout << "Y dtor" << std::endl;
}
};
int main()
{
std::shared_ptr<void> p(new X());
std::cout << 0 << std::endl;
p.reset(new Y()); // Xćē “ę£ććć
std::cout << 1 << std::endl;
} // Yćē “ę£ććć
åŗå
0
X dtor
1
Y dtor
åē §
- P3037R6
constexpr std::shared_ptrand friends - LWG Issue 899. Adjusting
shared_ptrfornullptr_t- C++11ć§ćåé¤åćå¼ć³åŗćę”ä»¶ć®čØčæ°ćććć¤ć³ćæ
pćęęćć¦ććå “åćććććŖććøć§ćÆćpćęęćć¦ććå “åććøę¹ćććććnullptrćØåé¤åććę§ēÆććshared_ptrć§ćåé¤åćå¼ć°ććććØćę確ć«ćććć
- C++11ć§ćåé¤åćå¼ć³åŗćę”ä»¶ć®čØčæ°ćććć¤ć³ćæ