Сценарий:
У меня есть класс, как показано ниже, который подключает лямбду в самом конструкторе. И лямбда по очереди вызывает функцию-член класса.
Код:
class SomeClass {
public:
typedef std::function<void(int)> Callback;
void ListenForCallback(const Callback& callback) {
m_callback = callback;
}
private:
Callback m_callback;
}
class MyClass {
public:
MyClass() {
m_some_class = std::make_unique<SomeClass>();
// Here in constructor itself I pass this pointer and hooking up to a lambda which calls a member function. Is this legal?
m_some_class->ListenForCallback([this](int value) {
std::cout << "Value is: " << value << std::endl;
TakeAction();
})
}
private:
std::unique_ptr<SomeClass> m_some_class;
void TakeAction() {
// Please do something
}
}
Вопрос:
Я скептически относился к использованию указатель this
в самом конструкторе MyClass
. И еще больше скептически относится к подключению лямбды, вызывающей члена. Но я обнаружил, что приведенный выше код работает! Я делаю все законно и правильно в приведенном выше коде?
Допустимо ли ссылаться на указатель this
в конструкторе класса? * * * * * * * * * sh 1021 * Окружение:
C ++ 14 код, скомпилированный с компиляторами Clang и G CC, чтобы узнать, является ли он действительным / недействительным, и объяснение или обоснование ответа. .