<pre> //====================== start of sample.cpp ========================== #include <boost/shared_ptr.hpp> #include <boost/scoped_ptr.hpp> #include <boost/weak_ptr.hpp> #include <vector> struct A { virtual ~A(); }; struct B: public A {}; struct C {}; void foo1(boost::shared_ptr<A> a); void foo2(boost::weak_ptr<B>& a); void foo3(boost::shared_ptr<C> a); void foo4(boost::scoped_ptr<A>& a); void foo5(std::vector< boost::weak_ptr<C> >& c); int main(int argc, char* argv[]) { boost::shared_ptr<A> a(new A); boost::shared_ptr<B> b(new B); boost::shared_ptr<C> c(new C); boost::weak_ptr<A> b1(a); boost::weak_ptr<B> b2(b); boost::weak_ptr<C> b3(c); std::vector< boost::weak_ptr<C> > v1; v1.push_back(b3); foo1(b2.lock()); foo2(b2); try { boost::shared_ptr<C> c1(c); foo3(c1); } catch(boost::bad_weak_ptr& e) { } foo4(b2.lock()); foo5(v1); return 0; } //====================== end of sample.cpp ========================== </pre> Вызовы каких функций выполнены корректно и операции создания их параметров не содержат очевидных проблем?
<pre> //====================== start of sample.cpp ========================== #include <boost/shared_ptr.hpp> #include <boost/weak_ptr.hpp> #include <vector> struct A { virtual ~A(); }; struct B: public A {}; struct C {}; void foo1(boost::shared_ptr<A>& a); void foo2(boost::shared_ptr<A const> a); void foo3(boost::shared_ptr<B>& a); void foo4(boost::shared_ptr<const A> a, boost::shared_ptr<C> c); void foo5(std::vector< boost::shared_ptr<C> >& c); int main(int argc, char* argv[]) { boost::shared_ptr<A> b1(new A); boost::shared_ptr<B> b2(new B); boost::shared_ptr<C> b3(new C); boost::weak_ptr<A> b4(b1); std::vector<boost::shared_ptr<C>> v1; v1.push_back(b3); foo1(b1); foo2(b2); foo3(b3); foo4(b4.lock(), b3); foo5(v1); return 0; } //====================== end of sample.cpp ========================== </pre> Вызовы каких функций выполнены корректно и операции создания их параметров не содержат очевидных проблем?
Каковы особенности умного указателя boost::scoped_ptr?
<pre> //====================== start of sample.cpp ========================== #include <boost/variant/variant.hpp> struct A {}; struct B { B(int src); private: B(const B& src); }; struct C { C(int src); private: C(); }; struct D {}; int main(int argc, char* argv[]) { boost::variant<int, A, B, C> myvariant; int x; int* y; A a; B b(x); C c(x); D d; myvariant = x; myvariant = y; myvariant = a; myvariant = b; myvariant = c; myvariant = d; return 0; } //====================== end of sample.cpp ========================== </pre> Какие объекты можно присвоить объекту myvariant из примера в файле sample.cpp?
<pre> //====================== start of sample.cpp ========================== #include <boost/circular_buffer.hpp> int main(int argc, char* argv[]) { boost::circular_buffer<int> circ(3); circ.push_back(1); circ.push_back(2); circ.push_back(3); circ.push_back(4); circ.push_back(5); circ.pop_back(); return 0; } //====================== end of sample.cpp ========================== </pre> Какие значения останутся в циклическом буфере circ в примере в файле sample.cpp?
<pre> //====================== start of sample.cpp ========================== #include <climits> #include <limits> #include <boost/static_assert.hpp> namespace name { BOOST_STATIC_ASSERT(std::numeric_limits<int>::digits == 32); } int main(int argc, char* argv[]) { return 0; } //====================== end of sample.cpp ========================== </pre> Что случится c программой из файла sample.cpp если в системе размер int больше 32 разрядов?
Каковы особенности умного указателя boost::shared_ptr?
Каковы особенности умного указателя boost::weak_ptr?
Какие утверждения о boost верны?
Библиотека boost::type_traits позволяет: