📄 shared_ptr_test.cpp
字号:
BOOST_TEST(px3? false: true);
BOOST_TEST(!px3);
BOOST_TEST(px3.get() == 0);
BOOST_TEST(px3.use_count() == px.use_count());
}
{
boost::shared_ptr<int> pi(static_cast<int*>(0));
boost::shared_ptr<int> pi2(pi);
BOOST_TEST(pi2 == pi);
BOOST_TEST(pi2? false: true);
BOOST_TEST(!pi2);
BOOST_TEST(pi2.get() == 0);
BOOST_TEST(pi2.use_count() == 2);
BOOST_TEST(!pi2.unique());
BOOST_TEST(pi2.use_count() == pi.use_count());
BOOST_TEST(!(pi < pi2 || pi2 < pi)); // shared ownership test
boost::shared_ptr<void> pi3(pi);
BOOST_TEST(pi3 == pi);
BOOST_TEST(pi3? false: true);
BOOST_TEST(!pi3);
BOOST_TEST(pi3.get() == 0);
BOOST_TEST(pi3.use_count() == 3);
BOOST_TEST(!pi3.unique());
BOOST_TEST(pi3.use_count() == pi.use_count());
BOOST_TEST(!(pi < pi3 || pi3 < pi)); // shared ownership test
boost::shared_ptr<void> pi4(pi2);
BOOST_TEST(pi4 == pi2);
BOOST_TEST(pi4? false: true);
BOOST_TEST(!pi4);
BOOST_TEST(pi4.get() == 0);
BOOST_TEST(pi4.use_count() == 4);
BOOST_TEST(!pi4.unique());
BOOST_TEST(pi4.use_count() == pi2.use_count());
BOOST_TEST(!(pi2 < pi4 || pi4 < pi2)); // shared ownership test
BOOST_TEST(pi3.use_count() == pi4.use_count());
BOOST_TEST(!(pi3 < pi4 || pi4 < pi3)); // shared ownership test
}
{
boost::shared_ptr<X> px(static_cast<X*>(0));
boost::shared_ptr<X> px2(px);
BOOST_TEST(px2 == px);
BOOST_TEST(px2? false: true);
BOOST_TEST(!px2);
BOOST_TEST(px2.get() == 0);
BOOST_TEST(px2.use_count() == 2);
BOOST_TEST(!px2.unique());
BOOST_TEST(px2.use_count() == px.use_count());
BOOST_TEST(!(px < px2 || px2 < px)); // shared ownership test
boost::shared_ptr<void> px3(px);
BOOST_TEST(px3 == px);
BOOST_TEST(px3? false: true);
BOOST_TEST(!px3);
BOOST_TEST(px3.get() == 0);
BOOST_TEST(px3.use_count() == 3);
BOOST_TEST(!px3.unique());
BOOST_TEST(px3.use_count() == px.use_count());
BOOST_TEST(!(px < px3 || px3 < px)); // shared ownership test
boost::shared_ptr<void> px4(px2);
BOOST_TEST(px4 == px2);
BOOST_TEST(px4? false: true);
BOOST_TEST(!px4);
BOOST_TEST(px4.get() == 0);
BOOST_TEST(px4.use_count() == 4);
BOOST_TEST(!px4.unique());
BOOST_TEST(px4.use_count() == px2.use_count());
BOOST_TEST(!(px2 < px4 || px4 < px2)); // shared ownership test
BOOST_TEST(px3.use_count() == px4.use_count());
BOOST_TEST(!(px3 < px4 || px4 < px3)); // shared ownership test
}
{
int * p = new int(7);
boost::shared_ptr<int> pi(p);
boost::shared_ptr<int> pi2(pi);
BOOST_TEST(pi2 == pi);
BOOST_TEST(pi2? true: false);
BOOST_TEST(!!pi2);
BOOST_TEST(pi2.get() == p);
BOOST_TEST(pi2.use_count() == 2);
BOOST_TEST(!pi2.unique());
BOOST_TEST(*pi2 == 7);
BOOST_TEST(pi2.use_count() == pi.use_count());
BOOST_TEST(!(pi < pi2 || pi2 < pi)); // shared ownership test
}
{
int * p = new int(7);
boost::shared_ptr<void> pv(p);
BOOST_TEST(pv.get() == p);
boost::shared_ptr<void> pv2(pv);
BOOST_TEST(pv2 == pv);
BOOST_TEST(pv2? true: false);
BOOST_TEST(!!pv2);
BOOST_TEST(pv2.get() == p);
BOOST_TEST(pv2.use_count() == 2);
BOOST_TEST(!pv2.unique());
BOOST_TEST(pv2.use_count() == pv.use_count());
BOOST_TEST(!(pv < pv2 || pv2 < pv)); // shared ownership test
}
BOOST_TEST(X::instances == 0);
{
X * p = new X;
boost::shared_ptr<X> px(p);
BOOST_TEST(px.get() == p);
boost::shared_ptr<X> px2(px);
BOOST_TEST(px2 == px);
BOOST_TEST(px2? true: false);
BOOST_TEST(!!px2);
BOOST_TEST(px2.get() == p);
BOOST_TEST(px2.use_count() == 2);
BOOST_TEST(!px2.unique());
BOOST_TEST(X::instances == 1);
BOOST_TEST(px2.use_count() == px.use_count());
BOOST_TEST(!(px < px2 || px2 < px)); // shared ownership test
boost::shared_ptr<void> px3(px);
BOOST_TEST(px3 == px);
BOOST_TEST(px3? true: false);
BOOST_TEST(!!px3);
BOOST_TEST(px3.get() == p);
BOOST_TEST(px3.use_count() == 3);
BOOST_TEST(!px3.unique());
BOOST_TEST(px3.use_count() == px.use_count());
BOOST_TEST(!(px < px3 || px3 < px)); // shared ownership test
boost::shared_ptr<void> px4(px2);
BOOST_TEST(px4 == px2);
BOOST_TEST(px4? true: false);
BOOST_TEST(!!px4);
BOOST_TEST(px4.get() == p);
BOOST_TEST(px4.use_count() == 4);
BOOST_TEST(!px4.unique());
BOOST_TEST(px4.use_count() == px2.use_count());
BOOST_TEST(!(px2 < px4 || px4 < px2)); // shared ownership test
BOOST_TEST(px3.use_count() == px4.use_count());
BOOST_TEST(!(px3 < px4 || px4 < px3)); // shared ownership test
}
BOOST_TEST(X::instances == 0);
BOOST_TEST(Y::instances == 0);
{
Y * p = new Y;
boost::shared_ptr<Y> py(p);
BOOST_TEST(py.get() == p);
boost::shared_ptr<X> px(py);
BOOST_TEST(px == py);
BOOST_TEST(px? true: false);
BOOST_TEST(!!px);
BOOST_TEST(px.get() == p);
BOOST_TEST(px.use_count() == 2);
BOOST_TEST(!px.unique());
BOOST_TEST(px.use_count() == py.use_count());
BOOST_TEST(!(px < py || py < px)); // shared ownership test
BOOST_TEST(X::instances == 1);
BOOST_TEST(Y::instances == 1);
boost::shared_ptr<void const> pv(px);
BOOST_TEST(pv == px);
BOOST_TEST(pv? true: false);
BOOST_TEST(!!pv);
BOOST_TEST(pv.get() == px.get());
BOOST_TEST(pv.use_count() == 3);
BOOST_TEST(!pv.unique());
BOOST_TEST(pv.use_count() == px.use_count());
BOOST_TEST(!(px < pv || pv < px)); // shared ownership test
boost::shared_ptr<void const> pv2(py);
BOOST_TEST(pv2 == py);
BOOST_TEST(pv2? true: false);
BOOST_TEST(!!pv2);
BOOST_TEST(pv2.get() == py.get());
BOOST_TEST(pv2.use_count() == 4);
BOOST_TEST(!pv2.unique());
BOOST_TEST(pv2.use_count() == py.use_count());
BOOST_TEST(!(py < pv2 || pv2 < py)); // shared ownership test
BOOST_TEST(pv.use_count() == pv2.use_count());
BOOST_TEST(!(pv < pv2 || pv2 < pv)); // shared ownership test
}
BOOST_TEST(X::instances == 0);
BOOST_TEST(Y::instances == 0);
}
void weak_ptr_constructor()
{
{
boost::weak_ptr<Y> wp;
BOOST_TEST(wp.use_count() == 0);
try
{
boost::shared_ptr<Y> p2(wp);
BOOST_ERROR("shared_ptr<Y> p2(wp) failed to throw");
}
catch(boost::bad_weak_ptr)
{
}
try
{
boost::shared_ptr<X> p3(wp);
BOOST_ERROR("shared_ptr<X> p3(wp) failed to throw");
}
catch(boost::bad_weak_ptr)
{
}
}
{
boost::shared_ptr<Y> p;
boost::weak_ptr<Y> wp(p);
if(wp.use_count() != 0) // 0 allowed but not required
{
boost::shared_ptr<Y> p2(wp);
BOOST_TEST(p2.use_count() == wp.use_count());
BOOST_TEST(p2.get() == 0);
boost::shared_ptr<X> p3(wp);
BOOST_TEST(p3.use_count() == wp.use_count());
BOOST_TEST(p3.get() == 0);
}
}
{
boost::shared_ptr<Y> p(new Y);
boost::weak_ptr<Y> wp(p);
{
boost::shared_ptr<Y> p2(wp);
BOOST_TEST(p2? true: false);
BOOST_TEST(!!p2);
BOOST_TEST(p2.get() == p.get());
BOOST_TEST(p2.use_count() == 2);
BOOST_TEST(!p2.unique());
BOOST_TEST(p2.use_count() == wp.use_count());
BOOST_TEST(p.use_count() == p2.use_count());
BOOST_TEST(!(p < p2 || p2 < p)); // shared ownership test
boost::shared_ptr<X> p3(wp);
BOOST_TEST(p3? true: false);
BOOST_TEST(!!p3);
BOOST_TEST(p3.get() == p.get());
BOOST_TEST(p3.use_count() == 3);
BOOST_TEST(!p3.unique());
BOOST_TEST(p3.use_count() == wp.use_count());
BOOST_TEST(p.use_count() == p3.use_count());
}
p.reset();
BOOST_TEST(wp.use_count() == 0);
try
{
boost::shared_ptr<Y> p2(wp);
BOOST_ERROR("shared_ptr<Y> p2(wp) failed to throw");
}
catch(boost::bad_weak_ptr)
{
}
try
{
boost::shared_ptr<X> p3(wp);
BOOST_ERROR("shared_ptr<X> p3(wp) failed to throw");
}
catch(boost::bad_weak_ptr)
{
}
}
}
#if defined(BOOST_DINKUMWARE_STDLIB) && (BOOST_DINKUMWARE_STDLIB < 306)
# define BOOST_OLD_AUTO_PTR
#endif
void auto_ptr_constructor()
{
{
std::auto_ptr<int> p;
boost::shared_ptr<int> pi(p);
BOOST_TEST(pi? false: true);
BOOST_TEST(!pi);
BOOST_TEST(pi.get() == 0);
BOOST_TEST(pi.use_count() == 1);
BOOST_TEST(pi.unique());
BOOST_TEST(p.get() == 0);
}
{
std::auto_ptr<int> p;
boost::shared_ptr<int const> pi(p);
BOOST_TEST(pi? false: true);
BOOST_TEST(!pi);
BOOST_TEST(pi.get() == 0);
BOOST_TEST(pi.use_count() == 1);
BOOST_TEST(pi.unique());
BOOST_TEST(p.get() == 0);
}
{
std::auto_ptr<int> p;
boost::shared_ptr<void> pv(p);
BOOST_TEST(pv? false: true);
BOOST_TEST(!pv);
BOOST_TEST(pv.get() == 0);
BOOST_TEST(pv.use_count() == 1);
BOOST_TEST(pv.unique());
BOOST_TEST(p.get() == 0);
}
{
std::auto_ptr<int> p;
boost::shared_ptr<void const> pv(p);
BOOST_TEST(pv? false: true);
BOOST_TEST(!pv);
BOOST_TEST(pv.get() == 0);
BOOST_TEST(pv.use_count() == 1);
BOOST_TEST(pv.unique());
BOOST_TEST(p.get() == 0);
}
{
std::auto_ptr<X> p;
boost::shared_ptr<X> px(p);
BOOST_TEST(px? false: true);
BOOST_TEST(!px);
BOOST_TEST(px.get() == 0);
BOOST_TEST(px.use_count() == 1);
BOOST_TEST(px.unique());
BOOST_TEST(p.get() == 0);
}
{
std::auto_ptr<X> p;
boost::shared_ptr<X const> px(p);
BOOST_TEST(px? false: true);
BOOST_TEST(!px);
BOOST_TEST(px.get() == 0);
BOOST_TEST(px.use_count() == 1);
BOOST_TEST(px.unique());
BOOST_TEST(p.get() == 0);
}
{
std::auto_ptr<Y> p;
boost::shared_ptr<X> px(p);
BOOST_TEST(px? false: true);
BOOST_TEST(!px);
BOOST_TEST(px.get() == 0);
BOOST_TEST(px.use_count() == 1);
BOOST_TEST(px.unique());
BOOST_TEST(p.get() == 0);
}
{
std::auto_ptr<Y> p;
boost::shared_ptr<X const> px(p);
BOOST_TEST(px? false: true);
BOOST_TEST(!px);
BOOST_TEST(px.get() == 0);
BOOST_TEST(px.use_count() == 1);
BOOST_TEST(px.unique());
BOOST_TEST(p.get() == 0);
}
{
std::auto_ptr<Y> p;
boost::shared_ptr<void> pv(p);
BOOST_TEST(pv? false: true);
BOOST_TEST(!pv);
BOOST_TEST(pv.get() == 0);
BOOST_TEST(pv.use_count() == 1);
BOOST_TEST(pv.unique());
BOOST_TEST(p.get() == 0);
}
{
std::auto_ptr<Y> p;
boost::shared_ptr<void const> pv(p);
BOOST_TEST(pv? false: true);
BOOST_TEST(!pv);
BOOST_TEST(pv.get() == 0);
BOOST_TEST(pv.use_count() == 1);
BOOST_TEST(pv.unique());
BOOST_TEST(p.get() == 0);
}
{
std::auto_ptr<int> p(new int(7));
int * q = p.get();
boost::shared_ptr<int> pi(p);
BOOST_TEST(pi? true: false);
BOOST_TEST(!!pi);
BOOST_TEST(pi.get() == q);
BOOST_TEST(pi.use_count() == 1);
BOOST_TEST(pi.unique());
BOOST_TEST(*pi == 7);
#if !defined(BOOST_OLD_AUTO_PTR)
BOOST_TEST(p.get() == 0);
#endif
}
{
std::auto_ptr<int> p(new int(7));
int * q = p.get();
boost::shared_ptr<int const> pi(p);
BOOST_TEST(pi? true: false);
BOOST_TEST(!!pi);
BOOST_TEST(pi.get() == q);
BOOST_TEST(pi.use_count() == 1);
BOOST_TEST(pi.unique());
BOOST_TEST(*pi == 7);
#if !defined(BOOST_OLD_AUTO_PTR)
BOOST_TEST(p.get() == 0);
#endif
}
{
std::auto_ptr<int> p(new int(7));
int * q = p.get();
boost::shared_ptr<void> pv(p);
BOOST_TEST(pv? true: false);
BOOST_TEST(!!pv);
BOOST_TEST(pv.get() == q);
BOOST_TEST(pv.use_count() == 1);
BOOST_TEST(pv.unique());
#if !defined(BOOST_OLD_AUTO_PTR)
BOOST_TEST(p.get() == 0);
#endif
}
{
std::auto_ptr<int> p(new int(7));
int * q = p.get();
boost::shared_ptr<void const> pv(p);
BOOST_TEST(pv? true: false);
BOOST_TEST(!!pv);
BOOST_TEST(pv.get() == q);
BOOST_TEST(pv.use_count() == 1);
BOOST_TEST(pv.unique());
#if !defined(BOOST_OLD_AUTO_PTR)
BOOST_TEST(p.get() == 0);
#endif
}
BOOST_TEST(X::instances == 0);
{
std::auto_ptr<X> p(new X);
X * q = p.get();
boost::shared_ptr<X> px(p);
BOOST_TEST(px? true: false);
BOOST_TEST(!!px);
BOOST_TEST(px.get() == q);
BOOST_TEST(px.use_count() == 1);
BOOST_TEST(px.unique());
BOOST_TEST(X::instances == 1);
#if !defined(BOOST_OLD_AUTO_PTR)
BOOST_TEST(p.get() == 0);
#endif
}
BOOST_TEST(X::instances == 0);
{
std::auto_ptr<X> p(new X);
X * q = p.get();
boost::shared_ptr<X const> px(p);
BOOST_TEST(px? true: false);
BOOST_TEST(!!px);
BOOST_TEST(px.get() == q);
BOOST_TEST(px.use_count() == 1);
BOOST_TEST(px.unique());
BOOST_TEST(X::instances == 1);
#if !defined(BOOST_OLD_AUTO_PTR)
BOOST_TEST(p.get() == 0);
#endif
}
BOOST_TEST(X::instances == 0);
{
std::auto_ptr<X> p(new X);
X * q = p.get();
boost::shared_ptr<void> pv(p);
BOOST_TEST(pv? true: false);
BOOST_TEST(!!pv);
BOOST_TEST(pv.get() == q);
BOOST_TEST(pv.use_count() == 1);
BOOST_TEST(pv.unique());
BOOST_TEST(X::instances == 1);
#if !defined(BOOST_OLD_AUTO_PTR)
BOOST_TEST(p.get() == 0);
#endif
}
BOOST_TEST(X::instances == 0);
{
std::auto_ptr<X> p(new X);
X * q = p.get();
boost::shared_ptr<void const> pv(p);
BOOST_TEST(pv? true: false);
BOOST_TEST(!!pv);
BOOST_TEST(pv.get() == q);
BOOST_TEST(pv.use_count() == 1);
BOOST_TEST(pv.unique());
BOOST_TEST(X::instances == 1);
#if !defined(BOOST_OLD_AUTO_PTR)
BOOST_TEST(p.get() == 0);
#endif
}
BOOST_TEST(X::instances == 0);
BOOST_TEST(Y::instances == 0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -