gpt4 book ai didi

c++ - 在 C++ 中是否有等同于 `instancetype` 的东西?

转载 作者:太空狗 更新时间:2023-10-29 23:04:12 25 4
gpt4 key购买 nike

我有一个基类 Base 派生自 A

我想写这样的东西

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

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

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

最佳答案

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

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

无论您需要什么,您都可以使用 shared_ptrweak_ptr

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

关于 instancetype:typeid 运算符就是您想要的。您只需要至少一个虚函数就可以工作(在这种情况下,几乎在所有情况下,析构函数也应该是虚函数)。

关于c++ - 在 C++ 中是否有等同于 `instancetype` 的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23449437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com