【发布时间】:2019-12-29 04:52:00
【问题描述】:
谁能解释“self_( this, []( ... ) {} )”的工作原理?
struct Parent {
std::shared_ptr<Parent> self_;
Parent() : self_( this, []( ... ) {} ) {}
operator std::shared_ptr<Parent>() const { return self_; }
}
【问题讨论】:
-
它没有——你传入了一个无操作删除器,所以你不妨只使用一个原始指针。
-
它以某种方式工作,并正确填充_self(此示例from here)但我不明白,“,[](...){}”做什么......
-
那个操作符不应该返回一个 shared_ptr 它应该返回一个weak_ponter。如果现在删除对象而其他共享指针存在,则这些共享指针将指向已删除的对象。
-
请注意
self_(也不是任何锁定的弱指针)不会让this保持活动状态。即使this由共享指针管理,它们也会有不同的管理块。这是一个非常危险的设计选择…… -
整个设计毫无意义。类保存指向自身的指针有什么意义?至少,该类应该从
std::enable_shared_from_this派生,然后使用 [shared_from_this()]() 为自己创建外部shared_ptr对象。但不是为了一个内部的人
标签: c++ lambda this initializer