有人可以解释“ self_( this, []( ... ) {} )
”的工作原理吗?
struct Parent {
std::shared_ptr<Parent> self_;
Parent() : self_( this, []( ... ) {} ) {}
operator std::shared_ptr<Parent>() const { return self_; }
}
答案 0 :(得分:4)
有人可以解释“
self_( this, []( ... ) {} )
”的工作原理吗?
self_
是Parent
的成员,是std::shared_ptr<Parent>
的成员。
使用
self_( this, []( ... ) {} )
使用带有两个参数的构造函数初始化:
(1)共享的指针this
是指向包含self_
(即名称)的同一对象的指针
(2)删除self_
对象时调用的函数
观察功能:[]( ... ) {}
这是一个lambda函数,可以接受所有功能({-{1}},这是老式的C可变参数方式),却什么也不做(主体为空)。
完成此操作(不执行删除程序)是因为当具有特定值的最后一个共享指针被销毁时,无需对...
指针进行任何操作。
答案 1 :(得分:1)
[]( ... ) {}
这只是lambda函数,它具有以下格式
[捕获子句](参数)-> return-type
{
的定义 方法
}
Capture子句:指定要捕获的变量,并按值或引用捕获
Parameters:输入参数列表,它可以是(int val1,int val2)或(...)或仅用于示例的任何内容
返回类型:lambda表达式的返回类型
[]:空的捕获子句意味着它什么也不捕获
(...):可变函数
{}:Lambda正文,其中包含用于lambda函数的代码