我可以使用匿名lambdas坚持静态值
Can I use anonymous lambdas to hold on to static values?
我想创建一个我想远离范围的对象,但请将引用引用到其字段。这种方法有什么好处吗?
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()
,然后销毁该临时对象。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 基于boost的程序的静态链接——zlib问题
- 在静态库中嵌入类方法
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 如何在C++中获得"静态纯虚拟"功能?
- 私有类型的静态常量成员
- 使用gcc从静态链接的文件中查找可选符号
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 如何在C++中使用非静态成员函数作为回调函数
- 将静态库链接到不带-fPIC的共享库中
- 静态结构和一个定义规则
- 为什么虚函数不能是静态的和全局的?
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 我可以使用匿名lambdas坚持静态值