0

私はクラスを持っています:

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

ヘッダーで定義されています。次に、別のクラスで、このタイプのオブジェクトを作成します。

WorkerThread **workerQueue;

これは実際にはポインタへのポインタです...OK、これまではすべて問題ありませんでした。
さて、これをどのように読むべきですか:

workerQueue = new WorkerThread*[maxThreads];

*ClassName(WorkerThread)と配列形式の後の意味は何ですか?

4

2 に答える 2

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

于 2012-12-19T01:59:53.750 に答える
2

たぶん、これは理解するのを少し明確にするでしょう:

typedef WorkerThread* PointerToWorkerThread;

PointerToWorkerThread *workerQueue;

workerQueue = new PointerToWorkerThread[maxThreads];
于 2012-12-19T02:30:12.603 に答える