智能指针是否处理向下转换(down casting),如果不是,有什么安全的工作方法可以解决这个限制?
我想做的一个例子是拥有两个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,并仅在使用时进行下转型?还有其他解决方案吗?
shared_ptr
。为什么对于您来说有两个智能指针共享所有权是个问题呢? - MSaltersfirst.get()
可能表明他们不知道他们应该分享。 - sbi