2012-12-19 2 views
0

У меня есть класс:Что означает «новое имя класса * []»?

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

Defined в заголовке. Теперь в другом классе я создаю объект этого типа:

WorkerThread **workerQueue; 

Что на самом деле указатель на указатель ... Хорошо, все хорошо до сих пор.
Теперь, как я должен прочитать:

workerQueue = new WorkerThread*[maxThreads]; 

Что такое смысл * после ClassName (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]; 
Смежные вопросы