我有一个班级:
class WorkerThread
{
public:
unsigned virtual run()
{
return 0;
}
};
在标题中定义。现在在另一个类中,我创建了一个这种类型的对象:
WorkerThread **workerQueue;
这实际上是一个指向指针的指针......好的,直到现在都很好。
现在,我该如何阅读:
workerQueue = new WorkerThread*[maxThreads];
ClassName(*
)之后的WorkerThread
和数组格式是什么意思?
答案 0 :(得分:8)
这是WorkerThread
指针数组的分配。
例如:
size_t maxThreads = 3;
WorkerThread** workerQueue = new WorkerThread*[maxThreads];
workerQueue[0]
是WorkerThread*
,WorkerThread[1]
和WorkerThread[2]
一样。
这些指针目前尚未初始化。
稍后您可能会看到类似的内容:
for(size_t x = 0; x < maxThreads; ++x)
{
workerQueue[x] = new WorkerThread(...);
//beginthreadex_, CreateThread, something....
}
我会告诉你,所有这些原始指针只是等待发生的内存泄漏,除非经过仔细处理。首选方法是将std::vector
用于WorkerThread
个对象的智能指针。
答案 1 :(得分:2)
也许这会让人更清楚地理解:
typedef WorkerThread* PointerToWorkerThread;
PointerToWorkerThread *workerQueue;
workerQueue = new PointerToWorkerThread[maxThreads];