gpt4 book ai didi

c++ - 引用此指针并从类的构造函数内部连接一个lambda是否合法?

转载 作者:行者123 更新时间:2023-12-02 10:04:39 24 4
gpt4 key购买 nike

方案:
我有下面这样的类,它在构造函数本身中连接了一个lambda。 lambda依次调用一个类成员函数。

代码:

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指针表示怀疑。甚至对挂接调用成员的lambda表示怀疑。但是,我发现上面的代码有效!我在上述代码中所做的一切合法且正确吗?

在类的构造函数中引用 this指针是否有效?我想知道其是否有效以及答案背后的解释或理由。

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

最佳答案

这可以。此时,存在MyClass类的对象。因此,指针this是有效的,当然someClass类也已完全构建。

唯一需要注意的是MyClass的成员初始化顺序-但实际上仅在初始化程序列表中,尽管由于您不在此处使用初始化程序列表,所以在此示例中无论如何都不是问题...

关于c++ - 引用此指针并从类的构造函数内部连接一个lambda是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60890397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com