[Слабое Я] Свифт альтернатива для C ++ - PullRequest
0 голосов
/ 13 февраля 2019

В языке программирования 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.
...