有一个长时间的请求,并从“主”(UI)线程调用。计划将其调用移动到单独的线程中。问题是在堆上的这个线程中创建了一些对象(主线程必须使用这些指针)。
问题:
答案 0 :(得分:4)
是
根据具体情况,这不是坏事也不好,只需按照你的算法做你需要的。
仅当对象析构函数与线程本地存储一起工作时,删除在另一个线程中创建的对象可能是危险的。这必须在课程文档中提及。
答案 1 :(得分:1)
没有什么可以阻止你这样做,虽然我不会建议。你最好使用shared_ptr
或类似的对象恕我直言。
答案 2 :(得分:1)
这是安全的,但不要忘记竞争条件。像这样删除它:
//someObj
if (someObj != null)
{
lock();
if (someObj != null)
{
delete someObj;
someObj = NULL;
}
unlock();
}
答案 3 :(得分:0)
允许在另一个帖子中删除 但是:程序员的责任是确保所有者始终为人所知。 此外,在多线程环境中,您必须确保没有竞争条件,其他线程仍尝试访问该对象。但是,当创建线程删除对象时也是如此。解决这个问题的一个好方法是使用共享/弱指针; boost shared_ptr是线程安全的
答案 4 :(得分:0)
您可能需要查看Boost's shared_ptr。无论在哪个线程中创建它们,它都将为您处理释放对象,并且还可以省去跟踪哪些线程持有指向哪些对象的指针的麻烦。它也完全是线程安全的(你仍然需要保护你自己对象的内部工作,但其余部分会照顾你)。