我正在创建线程安全列表,我遇到调用线程构造函数的问题.我有一个模板类
template <typename T>
class mylist{...}
Run Code Online (Sandbox Code Playgroud)
存储具有T数据的节点并mylist获得如此定义的成员函数
template <typename FUNC>
void for_each(FUNC f){...}
Run Code Online (Sandbox Code Playgroud)
为列表中的每个T数据调用f().我也有功能
template<typename T>
void show(T data)
{cout<<data<<", ";}
Run Code Online (Sandbox Code Playgroud)
我的问题是我不知道如何制作线程并将此函数传递给它.我试过这样的(mylist是一个类名,multithreadlist是一个对象mylist<size_t>
std::thread t1(&mylist<size_t>::for_each<void(*)(size_t)>, &multithreadlist, show<size_t>);
Run Code Online (Sandbox Code Playgroud)
我得到C2893无法专门化函数模板'unknown-type std :: invoke(_Callable &&,_ Types && ...)'和C2672'std :: invoke':找不到匹配的重载函数
快问.这会泄漏吗?为什么/为什么不呢?
int main()
{
int array[] = {1,2,3};
doStuff(array);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
何时doStuff会做这样的事情
void doStuff(int * arr)
{
// ...
arr = new int [50];
// ...
}
Run Code Online (Sandbox Code Playgroud)
编辑@Scott Hunter我认为它不会泄漏,因为array指向堆栈上的内存并且我从未听说过堆栈中的内存泄漏,但另一方面我有点丢失了这个内存的任何链接.
EDIT2我的问题是我的想法是改变arr在doStuff地址将改变array中main以及,但它不会.