微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 在成员函数上启动线程时发出不需要的析构函数

我的main函数中有一个事件循环,我想创建一个对象并在对象的成员函数上运行一个线程.但是,我注意到在线程启动之前对象被销毁了.我不明白为什么.

我的代码

#include <iostream>
#include <thread>

class MyClass {
public:
    MyClass(){
        std::cout << "MyClass constructor is called" << std::endl;
    }
    ~MyClass(){
        std::cout << "MyClass destructor is called" << std::endl;
    }    
    void start(){
        std::cout << "MyClass is starting" << std::endl;
    }
};

int main()
{
        MyClass mine;
        std::thread t(&MyClass::start,mine);
        t.join();
}

输出

MyClass constructor is called
MyClass destructor is called
MyClass is starting
MyClass destructor is called
MyClass destructor is called

期望的输出

MyClass constructor is called
MyClass is starting
MyClass destructor is called

解决方法

通过引用传递我的:std :: thread t(& MyClass :: start,std :: ref(mine));
我的类型是MyClass,这意味着你按值传递它.所以std :: thread将它的副本传递给新创建的线程.

你需要通过引用明确地告诉你通过我的模板.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐