gpt4 book ai didi

c++ - 在构造函数中初始化一个成员变量? (这应该是非常基本的......)

转载 作者:行者123 更新时间:2023-11-28 03:48:24 25 4
gpt4 key购买 nike

编辑:我需要重构这个问题,它有太多无关的组件来弄清楚我的问题(关于 C++)是什么。但是任何能理解我在问什么的人请回答。

我有一个代表线程的类。我正在使用的线程库 TinyThread++ 通过创建一个 thread 对象来启动一个线程,但是它没有复制构造函数。这是有道理的。无论如何,复制线程的意义是什么?

以前我一直这样初始化我的线程对象E_thread:

class E_thread {
E_threadRoutine m_routine;
E_thread *m_parent;
thread m_thread;
public:
E_thread(void *(void*),void*,E_thread*);
};
E_thread::E_thread(void *func(void*), void *arg, E_thread* parent):
m_parent(parent), m_routine(func,arg),
m_thread(thread_function_common, &m_routine)
{}

以这种方式初始化 thread 构造函数,我将 E_threadm_routine 成员的指针发送到线程作为它的争论。 m_routine 的目的是跟踪要传递给线程本身的线程特定功能。

但是现在我想在我想更仔细地分配 m_routine 的地方进行更改。现在 m_routine 是一个指针,我需要用

设置它
m_routine = new E_threadRoutineTypeX(func,arg,etc);

E_thread 构造函数体中。但这意味着我不能再像以前那样初始化 thread 了。我试着把

m_thread = thread(thread_function_common,m_routine);

在正文中,但这复制了我不想做的线程对象。必须有一些语法才能做到这一点......

最佳答案

您可以执行以下操作:使用函数初始化 m_routine,它将返回一个新的 E_threadRoutine,如下所示 -

m_routine(createThreadRoutine(func, arg))

并让 createThreadRoutine 以您想要的方式返回一个新的 E_threadRoutine。然后,您可以使用 (thread_function_common, m_routine) 初始化 m_thread。 createThreadRoutine 的使用不是强制性的,但如果需要的话,它会让您做的不仅仅是一个 new

为此,m_routine 必须出现在类中的 m_thread 之前,否则 m_thread 将在设置 m_routine 之前初始化。参见 Constructor initialization-list evaluation order .

关于c++ - 在构造函数中初始化一个成员变量? (这应该是非常基本的......),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6634687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com