我开始学习在C++0X/11中使用智能指针,并遇到了一个奇怪的情况。我想使用shared_ptr向上转型一个对象实例。
类Extend继承自类Base,其中Base类有一个虚析构函数以使其具有多态性(否则dynamic_pointer_cast会抱怨非多态类强制转换)。
因此:
std::shared_ptr<Base> obj = std::make_shared<Base>();
然后我做:
obj = std::dynamic_pointer_cast<Extend>(obj);
- 它安全吗?
- 其他指向该对象的指针会发生什么?只有obj将其视为Extend,而其他共享指针仍将其视为Base吗?
- 对于同一实例进行向上转换是否安全,还是应该采取其他措施?
编辑:感谢答案。我提出这个问题的真正原因是使用SAX解析器处理XML文档,但我被上下转换搞混了。
std::shared_ptr<Extend> ex = std::dynamic_pointer_cast<Extend>(obj);
obj = ex;
但这毫无意义,我将使用一个对象工厂。