c++ - 从这个对象的方法开始的线程中销毁类对象的最佳实践

标签 c++ multithreading c++11 memory-management shared-ptr

所以,所以标题听起来很疯狂,我认为代码可以更好地理解我的问题

class Class
{
public:
    static void* thread_func(void *thisObject)
    {
        // do some work
        delete thisObject; // cleanup

    }

    start_thread()
    {
        auto worker = std::thread(thread_func, this);
        worker.detach();
    }
}; 

如何使用这个类

Class *p = new Class;

p->start_thread(); // start some work in parralel and return from function

因此,我需要在 thread_func 完成后删除分配的对象。实现此类行为的最佳方式是什么?如代码示例所示,从线程函数中删除 thisObject 效果很好,但看起来不太好。

最佳答案

你真的不能那样做。一方面,您没有阻止任何人对您的类的实例进行堆栈分配。您可以这样做,但这可能只会导致更多问题。

相反,让您的线程函数简单地删除类中保存的内部资源。但不是类的实例。如果需要,您可以将类一分为二——一个管理删除另一个保存真实状态的类。

关于c++ - 从这个对象的方法开始的线程中销毁类对象的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34359332/

相关文章:

c++ - OpenCV:findHomography 生成一个空矩阵

c++ - 使用 std::mutex 避免竞争条件

c++ - 如何在 vector 列表初始化时避免对象复制以及如何延长临时对象的生命周期

java - 具有恒定大小操作的线程安全 NavigableSet?

vb.net - 通过引用传递参数的多个线程访问的函数

c++ - 如何解决虚拟方法中的实例化问题?

c++ - 这个问题中发生了运算符重载,但参数的数量和类型是相同的

c++ - 使用线程对数组的两半进行排序,但仅对后半部分进行排序

c++ - 为什么 C++ Map 的 [] 运算符调用映射值的默认构造函数?

c++ - 根据参数数量调用mixin基类的构造方法