C++;使用lambda函数进行回调 首先,我是C++初学者,所以我不知道我做的是正确的还是会引起一些问题。

C++;使用lambda函数进行回调 首先,我是C++初学者,所以我不知道我做的是正确的还是会引起一些问题。,c++,lambda,callback,C++,Lambda,Callback,所以,我尝试将一个通用回调传递给一个函数,然后从回调中的不同对象调用成员函数。在本例中,我使用lambda函数创建一个闭包来捕获对象,然后在lambda内部调用它们成员函数 例如,代码是这样的: // ... void functionWithCallback(std::function<void()> callback) { // Do some stuff ... callback(); } int main() { SomeClass some

所以,我尝试将一个通用回调传递给一个函数,然后从回调中的不同对象调用成员函数。在本例中,我使用lambda函数创建一个闭包来捕获对象,然后在lambda内部调用它们成员函数

例如,代码是这样的:

// ...

void functionWithCallback(std::function<void()> callback)
{
    // Do some stuff ...

    callback();
}


int main() 
{
    SomeClass some_object = SomeClass();
    AnotherClass another_object = AnotherClass();

    std::function<void()> callback = [&some_object, &another_object]() {
        some_object.someFunction();
        another_object.anotherFunction();
    };

    functionWithCallback(callback);
}

/。。。
void functionWithCallback(std::function callback)
{
//做些事情。。。
回调();
}
int main()
{
SomeClass some_object=SomeClass();
另一个类另一个_对象=另一个类();
std::function callback=[&某些\u对象,&另一个\u对象](){
some_object.someFunction();
另一个对象。另一个函数();
};
函数withcallback(callback);
}

我的问题是:这是一种正确的方式,还是会导致一些问题或意外行为?有没有比这更优雅的方法来做?

我不愿意回答“它会引起一些问题”,因为它很少见,这不是C++中的某些情况,但是你必须确保对象仍然是活着的(你应该删除它们,为什么使用<代码>新< /COD>?)否则就不会有明显的问题,因为没有匹配的删除,所以您的示例代码会泄漏内存。我会发现只分配堆栈上的对象并通过引用捕获它们更优雅。另外,在调用回调时,要注意对象仍然是活动的(这里就是这种情况,不管您是动态分配对象还是在堆栈上分配对象)。。。。这就是说,如果您希望您的代码被审查,也许是更好的地方。只需确保将完整且有效的代码张贴在那里,那么为什么标签会被滥发呢?使用C++标记用于当前标准和其他的,如果您的问题是关于标准版本的特定版本是正确的。但是原始的新的和删除的不是真正的现代C++代码。如果确实需要动态分配的对象,请使用
std::unique\u ptr