不好。最后没调用lambda,就leak。拷贝lambda并且都调用了,就double free。
auto up = std::make_unique<std::string>("hello");
if (0) {
auto f = [p=up.release()]{std::unique_ptr<std::string> ap(p);};
// leak
} else {
auto f = [p=up.release()]{std::unique_ptr<std::string> ap(p);};
auto g = f;
f();
g(); // double free
}
【 在 ble 的大作中提到: 】
: 对unique_ptr不太清楚的时候,我一般会release出来而不是在让它在lambda中间传递
: auto up = std::make_unique<Foo>();
: call([p=up.release()](){std::unique_ptr<Foo> ap(p); ap->bar();})
--
FROM 58.37.58.*