我有一系列退货的工厂unique_ptr<Base>。不过,在后台,它们提供了指向各种派生类型unique_ptr<Derived>(例如unique_ptr<DerivedA>,unique_ptr<DerivedB>等)的指针。
给定DerivedA : Derived,Derived : Base我们将有:
unique_ptr<Base> DerivedAFactory() {
return unique_ptr<Base>(new DerivedA);
}
我需要做的是将返回的指针“投射” unique_ptr<Base>到某个派生级别(不一定是原始的内部级别)。为了说明伪代码:
unique_ptr<Derived> ptr = static_cast<unique_ptr<Derived>>(DerivedAFactory());
我正在考虑通过从中释放对象来实现此目的unique_ptr,然后使用一个转换原始指针并将其重新分配给其他unique_ptr所需样式的release函数(在调用之前,调用方将显式完成此操作):
unique_ptr<Derived> CastToDerived(Base* obj) {
return unique_ptr<Derived>(static_cast<Derived*>(obj));
}
这是否有效,或者是否会发生一些时髦的事情?
PS。更为复杂的是,一些工厂驻留在运行时动态加载的DLL中,这意味着我需要确保在与创建对象相同的上下文(堆空间)中销毁所生成的对象。所有权转移(通常发生在另一个上下文中)必须随后提供原始上下文中的删除器。但是除了必须提供/强制释放删除器以及指针之外,强制转换问题应该相同。
HUWWW
喵喔喔
相关分类