谁能解释这个初始化代码?
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 函数的代码
谁能解释一下“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 函数的代码