Следующий код работает и печатает Dead
. Как вызов callback_fn
не вызывает сбой, поскольку деструктор явно вызывается?
#include <iostream>
#include <memory>
#include <functional>
class A {
private:
std::string message = "Alive";
public:
~A() { message = "Dead"; }
auto get_callback() { return [this](){ callback(); }; }
private:
void callback() const { std::cout << message << std::endl; }
};
int main()
{
std::function<void()> callback_fn;
{
A a;
callback_fn = a.get_callback();
}
callback_fn();
}
Так как this
фиксируется значением:
- Как функционирует членвызывать работу после уничтожения объекта?
- Почему память
message
освобождается при a
разрушении?
Если я напишу main
, как это, я получаюнет вывода (что я подозреваю, что поведение не определено). Я ожидал бы того же поведения, что и код abve.
int main()
{
auto a = std::make_unique<A>();
auto callback_fn = a->get_callback();
a.reset();
callback_fn();
}