Рассмотрим следующий код:
#include <iostream>
#include <memory>
using namespace std;
class T;
std::weak_ptr<T> wptr;
class T
{
public:
T() { }
~T() {
std::cout << "in dtor" << std::endl;
std::cout << (wptr.expired() ? "expired" : "not expired") << std::endl;
}
};
int main() {
{
auto ptr = std::make_shared<T>();
wptr = ptr;
std::cout << (wptr.expired() ? "expired" : "not expired") << std::endl;
}
return 0;
}
В этом коде я пытался выяснить, истек ли срок действия weak_ptr
на фазе уничтожения объектов. Кажется так. Выход:
not expired
in dtor
expired
Я использовал gcc-5.1 с ideone.
Теперь у меня другая проблема. Я не мог найти документацию о том, что это стандартное поведение. Гарантировано ли это работать, всегда?