有人能解释一下这个初始化代码吗?

SyC*_*DeR 0 c++ lambda this initializer

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

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

max*_*x66 5

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

self_,成员Parent,是std::shared_ptr<Parent>

self_( this, []( ... ) {} )
Run Code Online (Sandbox Code Playgroud)

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

(1)共享指针,this指向包含同一对象的指针self_(故名)

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

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

它是一个 lambda 函数,可以接受所有内容(...旧的 C 可变参数方式)并且不执行任何操作(主体为空)。

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

  • @SyCoDeR - 考虑共享指针:通常是在不同对象之间共享的分配(“新”)值。因此,通常,当一个对象被销毁时,析构函数不执行任何操作,直到存在另一个具有相同值的共享指针,并删除(“删除”运算符)包含删除最后一个共享指针的指针。在这种情况下,我们不希望最后一个共享指针析构函数删除值“this”。 (2认同)