“新的Classname * []”是什么意思?

时间:2012-12-19 01:58:39

标签: c++ arrays pointers

我有一个班级:

class WorkerThread
{
public:
    unsigned virtual run()
    {
        return 0;
    }
};

在标题中定义。现在在另一个类中,我创建了一个这种类型的对象:

WorkerThread **workerQueue;

这实际上是一个指向指针的指针......好的,直到现在都很好。
现在,我该如何阅读:

workerQueue = new WorkerThread*[maxThreads];

ClassName(*)之后的WorkerThread和数组格式是什么意思?

2 个答案:

答案 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];