看到下面的代码,我总觉得有些难以置信。
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;