我不明白爲什麼其他答案告訴你不要使用boost::swap
。 整個目的的boost::swap
是爲了隱藏using std::swap; swap(x, y);
業務。這只是正常:
#include <boost/swap.hpp>
int main()
{
int* pA = new int(10);
int *pB = new int(20);
boost::swap(pA, pB);
delete pA;
delete pB;
}
顯然,如果您還沒有boost/swap.hpp
這將無法工作。這就是你用boost::swap
交換兩件事情的方法。你應該總喜歡用這種形式交換兩件事!
什麼你正在閱讀僅僅是指出boost::scoped_ptr
還提供了boost
命名空間中的swap
過載,使這個工程太:
#include <boost/scoped_ptr.hpp>
int main()
{
boost::scoped_ptr<int> pA(new int(20));
boost::scoped_ptr<int> pB(new int(20));
boost::swap(pA, pB);
}
但應該明確的是,這是行不通的:
#include <boost/scoped_ptr.hpp>
int main()
{
int* pA = new int(10);
int *pB = new int(20);
boost::swap(pA, pB);
delete pA;
delete pB;
}
因爲boost/scoped_ptr.hpp
沒有提供(實際上沒有責任提供)的boost::swap
一般實現。如果你想使用一般boost::swap
,你必須包括boost/swap.hpp
:
#include <boost/scoped_ptr.hpp>
#include <boost/swap.hpp>
int main()
{
int* pA = new int(10);
int *pB = new int(20);
boost::scoped_ptr<int> pC(new int(20));
boost::scoped_ptr<int> pD(new int(20));
boost::swap(pA, pB);
boost::swap(pC, pD);
delete pA;
delete pB;
}
這樣。如果你有Boost可以做,不要回退到使用std::swap
的東西。
是你的書或代碼片段? – GManNickG 2012-03-13 19:21:32