2012-12-19 72 views
0

我有一個類:「new Classname * []」是什麼意思?

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

定義在頭。現在,在另一個類我創建這個類型的對象:

WorkerThread **workerQueue; 

這實際上是對指針... OK指針,都好到現在爲止。
現在,我應該怎麼看這個:

workerQueue = new WorkerThread*[maxThreads]; 

什麼是類名(WorkerThread)和陣列格式後*的含義是什麼?

+2

'(*的WorkerThread)maxThreads]'。現在更清楚了嗎? –

回答

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對象的智能指針。

+0

非常感謝! –

2

也許這將使它更清晰一點就明白了:

typedef WorkerThread* PointerToWorkerThread; 

PointerToWorkerThread *workerQueue; 

workerQueue = new PointerToWorkerThread[maxThreads];