从 class 的构造函数中引用这个指针并连接一个 lambda 是否合法?

Is it legal to refer to this pointer and hook up a lambda from inside the constructor of a class?

场景:
我有如下所示的 class,它在构造函数本身中连接了一个 lambda。而 lambda 依次调用一个 class 成员函数。

代码:

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
    }
}

问题:
我对在 MyClass 的构造函数本身中使用 this 指针持怀疑态度。甚至进一步怀疑连接一个调用成员的 lambda。但是,我发现上面的代码有效!我在上面的代码中所做的一切都是合法和正确的吗?

在 class 的构造函数中引用 this 指针是否有效?我想知道它是否 valid/invalid 以及答案背后的解释或推理。

环境:
使用 Clang 和 GCC 编译器编译的 C++ 14 代码。

这很好。 class MyClass 的对象此时存在。所以指针this是有效的,当然classsomeClass也已经构造完成

唯一需要注意的是 MyClass 的成员初始化顺序 - 但实际上只在初始化列表中,尽管因为您在这里没有使用初始化列表,所以这不是问题无论如何示例...

它可以出现在任何非静态成员函数的主体中。

来源:https://en.cppreference.com/w/cpp/language/this

构造函数是非静态成员函数,所以是合法的。