c++ - 如何在具有引用&的方法上返回 shared_ptr nullptr?
问题描述
我的代码是:
template<class T>
static shared_ptr<T>& getSharedPtr(lua_State* L, int32_t arg)
{
return *static_cast<shared_ptr<T>*>(lua_touserdata(L, arg));
}
此方法返回对 shared_ptr 的引用,因此当以下函数超出范围时,实际引用计数器会减少:
int32_t luaADelete(lua_State* L) {
auto& a = getSharedPtr<A>(L, 1); // No increase ref count
if (a) {
a.reset(); // Real shared_ptr decrease ref count
}
return 0;
}
一切都很好,但是如果堆栈上的对象不是有效的用户数据,我希望能够返回 nullptr,那么困境是在这种情况下我不能为特定方法返回 nullptr,因为它总是想返回一个引用。
static shared_ptr<T>& getSharedPtr(lua_State* L, int32_t arg)
下面的方法有效,但是看起来很丑,不知道是不是正确的做法:
template<class T>
static shared_ptr<T>& getSharedPtr(lua_State* L, int32_t arg)
{
if (!is<T>(L, arg)) {
static shared_ptr<T> shared_empty;
return shared_empty;
}
return *static_cast<shared_ptr<T>*>(lua_touserdata(L, arg));
}
我知道这种情况可以通过直接返回真实指针来处理,但我不希望它那样工作,因为它在编写时更麻烦:
// shared_ptr->get()->method(...); BAD!
// shared_ptr.get(); OK!
// shared_ptr->method(...); OK!
如果有人可以帮助我,我将不胜感激,我一直在互联网上搜索,我找不到类似的东西,所以我决定在这里写这个问题,非常感谢你,祝你有个美好的一天!
以下是您可以在线编译和测试的示例代码,以便您更轻松地帮助我:https ://godbolt.org/z/of4cTMG5e
解决方案
推荐阅读
- android - 单击按钮时,Countdowntimer 取消使应用程序崩溃
- c# - 仅在单击字段后启用必需的属性验证
- katalon-studio - 无法使用带有 Ubuntu 20.04 的 Katalon Studio 进行录制
- node.js - if 语句未在 for 循环内执行
- django - 通过 DRF 中的按位运算符组合的每个权限的唯一消息
- flutter - 在其他页面中打开抽屉
- javascript - 我如何正确使用 useEffect 进行异步获取调用和反应?反应钩子/详尽的deps
- git - SSH 不使用公钥进行身份验证 (Windows)
- javascript - 为什么 new Date('2020-06-16') 是 6/15?
- javascript - 有没有一种方法可以为每一行提供多个计算值?使用 jQuery