18class resource:
public uv_type<U>,
public emitter<T, E...>,
public std::enable_shared_from_this<T> {
20 int leak_if(
int err)
noexcept {
22 self_ptr = this->shared_from_this();
28 void self_reset()
noexcept {
32 bool has_self()
const noexcept {
33 return static_cast<bool>(self_ptr);
37 explicit resource(loop::token token, std::shared_ptr<loop> ref)
38 : uv_type<U>{token, std::move(ref)} {
39 this->
raw()->data =
this;
46 template<
typename R =
void>
47 std::shared_ptr<R>
data()
const {
48 return std::static_pointer_cast<R>(user_data);
55 void data(std::shared_ptr<void> udata) {
56 user_data = std::move(udata);
60 std::shared_ptr<void> user_data{
nullptr};
61 std::shared_ptr<void> self_ptr{
nullptr};