我可以使用匿名lambdas坚持静态值

Can I use anonymous lambdas to hold on to static values?

本文关键字:坚持 静态 lambdas 可以使 我可以      更新时间:2023-10-16

我想创建一个我想远离范围的对象,但请将引用引用到其字段。这种方法有什么好处吗?

A* a;
B* b;
[a, b]
{
   static Loader loader("some", "argument", "the constructor", "takes");
   a = loader.getA();
   b = loader.getB();
}();

匿名兰巴达是否用其拥有的价值摧毁了?是否有更好的设计模式可以实现同一件事?

好吧,这似乎是一个很好的方法。我的问题仍然是匿名lambda是否在解析时被销毁(并且随之而来的静态变量(。

您不需要lambda来执行此操作。static变量可以在块范围内声明,因此您可以重构为

A* a;
B* b;
{
   static Loader loader("some", "argument", "the constructor", "takes");
   a = loader.getA();
   b = loader.getB();
}
// more code

现在,loader再也无法直接访问(它不超出范围(,但是您可以存储指示/引用或它的成员(它的寿命持续到HE程序结束(。


另外,要回答您有关临时lambdas寿命的问题,如果您不捕获它们,它们就会被摧毁。

[](){ /* some code */ }();

将创建一个对象,调用其operator(),然后销毁该临时对象。