C++ 使用c+删除发送到FLTK中线程的数据+;

C++ 使用c+删除发送到FLTK中线程的数据+;,c++,multithreading,memory-leaks,fltk,C++,Multithreading,Memory Leaks,Fltk,我正在FLTK(C++中)中的一个新线程(即,不是主GUI线程)中执行一个长任务,该任务在某些函数中实现 我通过一个回调函数来实现这一点,该函数反过来创建线程,这样我就有了这样的形式 void callback(Fl_Widget* widget,void* passed_data){ data_type* data = new data_type; data->value = x; //populate data structure to send to function fl_c

我正在FLTK(C++中)中的一个新线程(即,不是主GUI线程)中执行一个长任务,该任务在某些函数中实现

我通过一个回调函数来实现这一点,该函数反过来创建线程,这样我就有了这样的形式

void callback(Fl_Widget* widget,void* passed_data){

data_type* data = new data_type;

data->value = x; //populate data structure to send to function

fl_create_thread(thread1,function,data);

}
其中fl_create_thread(至少出于我的目的)只是使用pthread_create,这意味着数据变量作为空指针传递,因此“函数”也使用空指针

我意识到这实际上会造成内存泄漏,因为我没有删除“数据”: 我不能在fl_create_线程行之后删除它,因为该线程不一定(或曾经)完成运行。我曾尝试删除“function”末尾的指针,但这会引发两个问题

1) 删除一个空指针是未定义的,因此我得到了相应的警告

2) 这几乎违背了使用函数的意义:是否有更好的通用编码实践

谁能告诉我该怎么做?谢谢

1) 删除一个空指针是未定义的,因此我收到了警告 为此目的

您可能在函数的一开始就转换为正确的类型(或者您应该这样做,以便有意义地使用参数)。删除该指针而不是
void*
参数,您将不会得到警告

2) 这几乎违背了使用函数的意义:是否存在 更好的通用编码实践

我不太明白你的意思。这个线程接口(pthread)非常类似于c,因此它必须使用void指针来传递任意数据。您可以查看更多的C++方法来定义执行什么以及使用什么参数< /P>
对于内存,您应该始终清除已分配内存的所有权。这种方法将所有权转移到刚创建的线程。

没错,我正在转换到所需的数据类型。为了澄清,在“函数”内执行(数据是原始问题中传递给函数的void_ptr)data_type*ptr=(data_type*)数据是否安全和正确(避免内存泄漏);删除ptr;除此之外,我想我的意思是,如果能够编写一个函数,这样它就可以不知道是使用按引用传递调用它,还是使用堆上或线程中的变量等来调用它(即不必担心内部内存泄漏的可能性)。可以查看std::thread。谢谢