0

スタックに割り当てられたリスト コンテナーの格納と、格納されたリスト コンテナーへの他の関数へのアクセスについて混乱しています。すべてをヒープに置く方が良いかどうか提案してください。すべてをヒープに置くには、デストラクタでより慎重な削除操作が必要になります。

typedef (*func)(); // Callback type  

class SignalHandler {
    ...
    ...
    void Register(int, func);
    void UnRegister(int, func);


public:
    map<int, list<func> > mCallbackMap;
}


void SignalHandler::Register(int signal, func f){
....
    list<func> l;   // A new list 
    l.push_back(f);  // insert f to the list
    mCallbackMap.insert(make_pair(signal, l)); // Insert in map
....
....
....
}

関数 Register, list l では、リスト コンテナーがスタックに割り当てられます。このコンテナーはマップに挿入されます。コンテナーがスタックに割り当てられているため、マップに格納されているリスト コンテナーに他の関数で安全にアクセスできますか?

例えば:

void SignalHandler::UnRegister(int signal, func f) {
....
....
    it = mCallbackMap.find(signal);
    if (it != mCallbackMap.end()) {
        list<func> *l = &(it->second);   // Is it OK to access it here? I am confused. 
    }
}

前もって感謝します。

4

1 に答える 1

0

STL コンテナーは、参照セマンティクスではなく、値セマンティクスに従います。したがって、実際には要素の内部コピーを作成し、それらの要素のコピーを返します。コピーが作成されるので、問題ないはずです。

于 2013-05-17T02:04:09.310 に答える