Можно ли при полиморфизме использовать boost :: smart_ptr , например scoped_ptr и shared_ptr?
class SomeClass { public: SomeClass() { a_ptr.reset(new SubClass); } private: boost::scoped_ptr<SuperClass> a_ptr; }
Я верю, что ответ - да; указатели повышения кодируются так, что производные классы принимаются везде, где будет суперкласс.
Да
#include <string> #include <iostream> using namespace std; #include <boost\shared_ptr.hpp> using namespace boost; class Foo { public: virtual string speak() const { return "Foo"; } virtual ~Foo() {}; }; class Bar : public Foo { public: string speak() const { return "Bar"; } }; int main() { boost::shared_ptr<Foo> my_foo(new Bar); cout << my_foo->speak(); }
Вывод: Bar
Bar