【发布时间】:2014-05-03 20:26:16
【问题描述】:
我有一个基类 Base 派生自 A。
我想写这样的东西
Base *unsafeRelease() {
--_refCount;
return this;
}
... 这样我就可以在 Base 子类的实例上调用 unsafeRelease。
在我看来,问题是在所有预期情况下使用此代码将涉及向上转换和向下转换。我想以某种方式指定我将返回一个指向Base 子类实例的指针。这可能吗?
【问题讨论】:
-
请看
std::enable_shared_from_this和virtual。 -
我认为在这种情况下我不想要
shared_ptr。这一切都在具有 C 包装器的 C++ 库中。virtual看起来确实是正确的方向。我不需要重写每个子类吗? stackoverflow.com/questions/4665117/… -
您需要一个虚拟析构函数来正确销毁,否则只需覆盖您必须要做的。为什么你认为你不应该使用
shared_ptr?关于您的字面问题:typeid为您提供对象的实例类型,该对象类型以至少一个虚函数的类型给出。也可用于类类型本身。 -
@Deduplicator:也许是这样,如果
delete用于基类类型的某处。但不仅仅是因为这里显示的代码。 -
@Deduplicator:
shared_ptr不能跨库边界使用,听起来他有。
标签: c++ pointers inheritance