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

时间:2019-08-23 22:03:09

标签: c++ lambda this initializer

有人可以解释“ self_( this, []( ... ) {} )”的工作原理吗?

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

2 个答案:

答案 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函数的代码