看到下面的代码,我总觉得有些难以置信。
bool Server::addTransfer(const TransferPtr& transfer)
{ TransferPtr newtransfer = transfer; boost::shared_ptr<TransferPtrs> newtransfers_(new TransferPtrs); if (!newtransfers_) { return false; } { MutexLockGuard lock(mutex_); if (transfers_->find(newtransfer->name()) != transfers_->end()) { return false; } for (TransferPtrs::iterator it=transfers_->begin(); it!=transfers_->end(); ++it) { const string& n = it->first; const TransferPtr& s = it->second; newtransfers_->insert(TransferPtrs::value_type(n,s)); } newtransfers_->insert(TransferPtrs::value_type(newtransfer->name(), newtransfer)); transfers_.swap(newtransfers_); } LOG_INFO << "Add Transfer: " << newtransfer->name(); return true;}
功能上是不是等价于下面的代码:
MutexLockGuard lock(mutex_); if (transfers_->find(transfer->name()) != transfers_->end()) { return false; } transfers_->insert(TransferPtrs::value_type(transfer->name(), transfer));
return true;