在我使用shared_ptr之后,抛出“ std :: bad_weak_ptr的实例后调用终止”是什么

夜听风雨声

该类Request将自己添加到类中EventLoopshared_ptrloop不是nullptr。但是,我遇到了一些问题。代码如下:

#include <iostream>
#include <vector>
#include <memory>
using namespace std;

class Request;
typedef std::shared_ptr<Request> RequestPtr;


class EventLoop
{
public:
    EventLoop();
    ~EventLoop();
    vector<RequestPtr> relist;

    void add_request(RequestPtr re)
    {
        relist.push_back(re);
    }
};
typedef std::shared_ptr<EventLoop> EventLoopPtr;

EventLoop::EventLoop() {}
EventLoop::~EventLoop() {}


class Request: public std::enable_shared_from_this<Request>
{
public:
    Request();
    ~Request();
    EventLoopPtr loop;

    void add_inself()
    {
        loop->add_request(shared_from_this());
        cout << "Yes, success adding into it" << endl;
    }
};

Request::Request(): loop(std::make_shared<EventLoop>())
{}

Request::~Request() 
{}

int main()
{
    Request r;
    r.add_inself();

    std::cout << "END" << std::endl;
    return 0;
}

错误消息是:

terminate called after throwing an instance of 'std::bad_weak_ptr'
what():  bad_weak_ptr
Aborted

有什么办法吗?非常感谢你

阿瑟德

为了使用shared_from_this,您需要具有该共享指针。main函数中,尝试不实例化堆对象Request,而是实例化std::shared_ptr<Request> r = std::make_shared<Request>(); r->add_inself();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用std :: move与std :: shared_ptr

来自分类Dev

使用* this作为std :: shared_ptr

来自分类Dev

使用* this作为std :: shared_ptr

来自分类Dev

使用模板将std :: shared_ptr <Derived>上载到std :: shared_ptr <Base>

来自分类Dev

为什么在抛出'std :: bad_alloc'实例后终止调用?

来自分类Dev

使用std shared_ptr作为std :: map键

来自分类Dev

QVariant与std :: shared_ptr

来自分类Dev

QVariant与std :: shared_ptr

来自分类Dev

在信号处理程序中使用`std :: shared_ptr`和`std :: weak_ptr`是否安全?

来自分类Dev

我可以用std :: shared_ptr而不是boost :: shared_ptr构建Boost库

来自分类Dev

我对std :: vector <shared_ptr>有疑问

来自分类Dev

如何在boost :: object_pool中使用boost :: shared_ptr / std :: shared_ptr?

来自分类Dev

使用std :: shared_ptr而不是boost :: shared_ptr时编译失败

来自分类Dev

如何在boost :: object_pool中使用boost :: shared_ptr / std :: shared_ptr?

来自分类Dev

尝试了解std :: enable_shared_from_this <T>,但使用它会导致bad_weak_ptr

来自分类Dev

使用make_shared <std :: thread>创建shared_ptr <std :: thread>的实例

来自分类Dev

我在链表实现中的std :: shared_ptr和std :: unique_ptr怎么办?

来自分类Dev

为什么std :: shared_ptr两次调用我的析构函数?

来自分类Dev

使用std map和shared_ptr的奇怪内存行为

来自分类Dev

如何使用std :: shared_ptr实现多态?

来自分类Dev

使用std :: shared_ptr和指向成员函数的指针

来自分类Dev

使用std :: shared_ptr的数组索引符号到数组

来自分类Dev

C ++使用指向std :: shared_ptr的Raw指针

来自分类Dev

使用工厂函数创建std :: shared_ptr

来自分类Dev

Clang无法使用libstdc ++识别std :: shared_ptr

来自分类Dev

使用std map和shared_ptr的奇怪内存行为

来自分类Dev

使用std :: shared_ptr线程构建基块

来自分类Dev

在抛出 std::exception 实例后调用终止

来自分类Dev

使用boost :: shared_ptr <std :: list <T >>初始化boost :: shared_ptr <std :: vector <T >>

Related 相关文章

  1. 1

    使用std :: move与std :: shared_ptr

  2. 2

    使用* this作为std :: shared_ptr

  3. 3

    使用* this作为std :: shared_ptr

  4. 4

    使用模板将std :: shared_ptr <Derived>上载到std :: shared_ptr <Base>

  5. 5

    为什么在抛出'std :: bad_alloc'实例后终止调用?

  6. 6

    使用std shared_ptr作为std :: map键

  7. 7

    QVariant与std :: shared_ptr

  8. 8

    QVariant与std :: shared_ptr

  9. 9

    在信号处理程序中使用`std :: shared_ptr`和`std :: weak_ptr`是否安全?

  10. 10

    我可以用std :: shared_ptr而不是boost :: shared_ptr构建Boost库

  11. 11

    我对std :: vector <shared_ptr>有疑问

  12. 12

    如何在boost :: object_pool中使用boost :: shared_ptr / std :: shared_ptr?

  13. 13

    使用std :: shared_ptr而不是boost :: shared_ptr时编译失败

  14. 14

    如何在boost :: object_pool中使用boost :: shared_ptr / std :: shared_ptr?

  15. 15

    尝试了解std :: enable_shared_from_this <T>,但使用它会导致bad_weak_ptr

  16. 16

    使用make_shared <std :: thread>创建shared_ptr <std :: thread>的实例

  17. 17

    我在链表实现中的std :: shared_ptr和std :: unique_ptr怎么办?

  18. 18

    为什么std :: shared_ptr两次调用我的析构函数?

  19. 19

    使用std map和shared_ptr的奇怪内存行为

  20. 20

    如何使用std :: shared_ptr实现多态?

  21. 21

    使用std :: shared_ptr和指向成员函数的指针

  22. 22

    使用std :: shared_ptr的数组索引符号到数组

  23. 23

    C ++使用指向std :: shared_ptr的Raw指针

  24. 24

    使用工厂函数创建std :: shared_ptr

  25. 25

    Clang无法使用libstdc ++识别std :: shared_ptr

  26. 26

    使用std map和shared_ptr的奇怪内存行为

  27. 27

    使用std :: shared_ptr线程构建基块

  28. 28

    在抛出 std::exception 实例后调用终止

  29. 29

    使用boost :: shared_ptr <std :: list <T >>初始化boost :: shared_ptr <std :: vector <T >>

热门标签

归档