Гарантируется ли, что weak_ptr истечет, когда shared_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)
}