shared_ptr が含まれているのと同じアドレスにリセットされたときに、weak_ptr が期限切れになることが保証されていますか?
#include <cassert>
#include <memory>
int main()
{
int* i = new int(0);
std::shared_ptr<int> si( i );
std::weak_ptr<int> wi = si;
si.reset( i );
assert( wi.expired() ); // wi.expired() == true (GCC 4.7)
}
または、これは の値がwi.expired()
定義されていない場合に当てはまりますか?
編集:
質問を少し変更します。
が初期化されたときに含まれていた同じアドレスにリセットされたweak_ptr
ときに期限切れになることが保証されていますか?shared_ptr
shared_ptr
weak_ptr
#include <cassert>
#include <memory>
int main()
{
int* i = new int(0);
std::shared_ptr<int> si( i );
std::weak_ptr<int> wi = si;
si.reset();
int* j = new int(0);
// Suppose that new returns the same address that contains variable i :
assert(j == i);
si.reset( j );
assert( wi.expired() ); // wi.expired() == true (GCC 4.7)
}