我只是P值插入到下個地圖,我得到它的地圖,它的值應該是20,但不是,爲什麼?C++ 11 share_ptr作爲值映射關鍵
typedef shared_ptr<BaseObject> PtrValue;
class CodeExecuteContext{
public:
map<string,PtrValue> varIdentPool;
};
class BaseInteger :public BaseObject{
public:
int value;
BaseInteger(int val):value(val){
enumObjType = INT;
};
};
...
PtrValue pValue = rightNode->executeCode(context);
context.varIdentPool.insert(make_pair(leftNode.idName,pValue));
BaseInteger * baseInteger = (BaseInteger *) pValue.get();
cout << "==AssignmentASTFork== insert [ " << leftNode.idName << " , " << baseInteger->value << " ]" <<endl;
map<string,PtrValue>::iterator it;
for (it = context.varIdentPool.begin() ; it!=context.varIdentPool.end();it++) {
BaseInteger * baseInteger = (BaseInteger *) it->second.get();
cout << "[key : " << it->first << ", value : " << baseInteger->value << endl;
}
結果:
== AssignmentASTFork ==插入[精氨酸,20]
[鍵:精氨酸,值:32742]
我的猜測是,該地圖已包含此鍵更改地圖中的價值。 '地圖:: insert'是無操作在這種情況下 - 它不更換新價值現有的值。 –