【发布时间】:2014-11-12 02:43:37
【问题描述】:
我想知道这是可能的。创建 TestClass 类型的 shared_ptr 或 unique_ptr。
然后调用 _beginthreadex 并将类的静态方法作为要执行的函数传递给它,并将之前创建的 shared_ptr 或 unique_ptr 作为数据传递给它。像这样:
shared_ptr<TestClass> p = make_shared<TestClass>(count, "test");
HANDLE hth1 = (HANDLE)_beginthreadex(NULL, 0, p->ThreadStart,p, 0, NULL);
我通常在没有智能指针的情况下使用这种方法,我通常创建一个 TestClass 的普通指针并将 TestClass 的静态方法和指针本身作为数据传递,然后在静态方法中将其转换为 (TestClass *) 并运行类的成员方法等,完成工作,当线程完成时,我删除指针。像这样的:
TestClass * p = new TestClass(count, "test");
HANDLE hth1 = (HANDLE)_beginthreadex(NULL, 0, p->ThreadStart,p, 0, NULL);
我想要实现的是让智能指针在线程结束时自动删除对象,因为智能指针会超出范围。
当我按照我在上面描述的方式进行操作时,编译器会显示此错误:
“不存在从“std::shared_ptr”到“void *”的合适转换函数”
【问题讨论】:
-
您考虑过使用standard thread 库吗?那么就完全有可能
-
如果我不能像第一次尝试那样做,那是我的下一步行动
-
这似乎是对
shared_ptr的一种特别愚蠢的用法。哦,让我们使用这个共享指针。但它是共享的,我们不希望它被共享。没关系,我们会设法让它表现得像不共享一样。但是……为什么要这样做呢?如果您已经拥有shared_ptr或出于某种原因需要它(也许线程需要延长对象的生命周期),这将非常有意义。但是创建一个只是为了撤销其唯一目的……太疯狂了! -
大卫,我不认为你明白我的要求,但没关系,反正 txs
标签: c++ c++11 shared-ptr smart-pointers unique-ptr