智能指针是否处理向下转换,如果不是,解决此限制的安全方法是什么?
我正在尝试做的一个示例是拥有两个包含智能指针的 STL 向量(例如)。第一个包含指向基类的智能指针,而第二个包含指向派生类的智能指针。智能指针被引用计数,例如与 Boost 的 shared_ptrs 类似的行为,但手动滚动。我已经包含了一些示例代码,我整理了这些示例代码以提供示例:
vector<CBaseSmartPtr> vecBase;
vector<CDerivedSmartPtr> vecDer;
...
CBaseSmartPtr first = vecBase.front();
vecDer.push_back(CDerivedSmartPtr(dynamic_cast<CDerived*>(first.get()));
这对我来说似乎不安全,因为我认为我最终会使用两个智能指针来管理同一个对象。在跟踪的某个时刻,这可能会导致其中一个释放对象,而另一个仍然持有对它的引用。
我希望但不认为会起作用的是在保持相同对象的同时直接向下投射,例如
dynamic_cast<CDerivedSmartPtr>(first)
我是否应该将第二个容器更改为也使用 CBaseSmartPtr 并仅在使用时降低?还有其他解决方案吗?