他の回答があなたに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
を使って2つのものを交換する方法です。あなたは常にこの形式で2つのものを交換することを好むべきです!
何を読んでいることは、単にこれはあまりにも動作するように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
の一般的な実装をするので。そのような
#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::swap
を使用したい場合は、boost/swap.hpp
を含める必要があります。あなたができるBoostを持っているなら、std::swap
ものを使用することにフォールバックしないでください。
コードスニペットはあなたのものか本のものか。 – GManNickG