谁能解释这个初始化代码?

Can anybody explain this initializer code?

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

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

Can anybody explain how "self_( this, []( ... ) {} )" works?

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

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

使用带有两个参数的构造函数初始化:

(1) 共享指针,this,指向包含self_(因此名称)

的同一对象的指针

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

观察函数:[]( ... ) {}

这是一个 lambda 函数,可以接受所有(...,旧的 C 可变参数方式)并且什么也不做(主体是空的)。

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

[]( ... ) {}

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

[ capture clause ] (parameters) -> return-type
{
definition of method
}

捕获子句:指定捕获哪些变量,按值或引用捕获

参数:输入参数列表,可以是(int val1,int val2)或(...)或任何这只是为了举例

Return 类型:return lambda 表达式的类型

[] :空捕获子句意味着它不捕获任何东西

(...) :可变函数

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