任何人都可以解释这个初始值设定项代码吗?

Can anybody explain this initializer code?

本文关键字:代码 解释 都可以 任何人      更新时间:2023-10-16

谁能解释一下"self_( this, []( ... ) {} )"是如何工作的?

struct Parent {
std::shared_ptr<Parent> self_;
Parent() : self_( this, []( ... ) {} ) {}
operator std::shared_ptr<Parent>() const { return self_; }
}

谁能解释一下"self_( this, []( ... ) {} )"是如何工作的?

self_Parent的成员,是一个std::shared_ptr<Parent>

self_( this, []( ... ) {} )

使用具有两个参数的构造函数进行初始化:

(1(指针共享,this指向包含self_的同一对象的指针(所以名称(

(2( 删除self_对象时调用的函数

观察功能:[]( ... ) {}

它是一个lambda函数,可以接受所有(...,old-C可变参数方式(并且什么都不做(主体为空(。

这样做(不执行任何操作删除器(是因为当具有特定值的最后一个共享指针被销毁时,无需对this指针执行任何操作。

[]( ... ) {}

这只不过是lambda函数,它具有以下格式

[ 捕获子句 ] (参数( -> 返回类型
{
定义 方法
}

捕获子句:指定通过值或引用捕获和捕获哪些变量

参数:输入参数列表可以是(int val1,int val2(或(...(或任何仅供参考的示例

返回类型:lambda 表达式的返回类型

[]:空捕获子句表示它不捕获任何内容

(...( : 可变参数函数

{} : Lambda 主体,其中包含 lambda 函数的代码