在C ++中是否有类似于`instancetype`的东西?

时间:2014-05-03 20:26:17

标签: c++ pointers inheritance

我有一个基类BaseA从中派生出来。

我想写这样的东西

Base *unsafeRelease() {
    --_refCount;
    return this;
}

...这样我就可以在unsafeRelease子类的实例上调用Base

我认为问题在于,使用此代码将涉及所有预期案例中的向上转发和向下转发。我想以某种方式指定我将返回一个指向Base子类实例的指针。这可能吗?

1 个答案:

答案 0 :(得分:1)

Base导出std::enable_shared_from_this并使用make_shared分配您的对象 一个好的库的开销是2*sizeof(size_t)+sizeof(std::shared_ptr),没有额外的分配。

这允许您将原始指针分发为不透明的句柄并仍然恢复shared_ptr,并且它有效地处理了使用匹配的释放函数的要求。

您可以随时使用shared_ptrweak_ptr

另一种方法是在Release中定义引用计数,函数AddRefBase和虚拟析构函数,手动管理您的引用计数(请查看IUnknown ,所有COM类的基本接口。考虑让你的类派生自你的平台实现)。

关于instancetypetypeid - 运营商就是您想要的。你只需要至少一个虚函数就可以工作(在这种情况下,析构函数也应该是虚拟的,几乎在所有情况下都是如此)。

相关问题