В языке программирования Swift принято передавать self
по слабой ссылке в замыкание, например:
self.someAsyncFunction(param1, param2, { [weak self] in
self?.doSomething()
})
Очень удобная вещь на мой взгляд.
Есть ли подобноев С ++?Например:
this->someAsyncFunction(param1, param2, [this](){
this->doSomething();
});
Экземпляр вызывающей стороны (или this
) мог быть удален в момент выполнения лямбды.В результате он падает на this->doSomething()
.Другими словами, я хочу иметь что-то вроде этого:
this->someAsyncFunction(param1, param2, [weak this](){
if (this)
this->doSomething();
});
, который, конечно, не является допустимым кодом C ++.
Есть ли полезная практика по решению такой проблемы?
В идеале решение должно обрабатывать все возможные значения, такие как
this
создается new
и удаляется с помощью delete
. this
время жизниконтролируется std::shared_ptr
. this
время жизни контролируется boost::intrusive_ptr
.