c++11shared_ptr存储线程

发布于 2022-09-07 19:45:17 字数 572 浏览 19 评论 0

class t  
{
public:
    vector<shared_ptr<thread> > t1;
public:
    t() 
    {
        for (int i = 0; i < 3; i++) 
        {
            t1.push_back(make_shared<thread>(&t::Func, this)); //(1)
        }
    }
    void Func() 
    {
        cout << " hello world!" << endl;
    }
};

请问为什么在(1)的地方一定要如此初始化呢,
不写成这样他的报错会是:
t。错误:ISO c++禁止使用非限定或圆括号的非静态成员函数的地址来形成成员函数的指针
是因为禁止直接将非静态的类成员函数 t::Func 直接转换到thread类指针么?,
如果是因为这样那为什么一定要这样写呢? 像&(t::Func)也会报上面的错

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

荒岛晴空 2022-09-14 19:45:17

t::Funct的成员函数,有一个隐藏参数this,自然要先传一个参数进去。。
t1.push_back(make_shared<thread>(&t::Func, NULL)); //(1) 你这么写也行。。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文