我应该在这里使用哪种指针?

3
我正在和同事一起处理一个旧的大型代码库。该代码库使用了大量的std::shared_ptr,而先前的开发人员喜欢使用较长的属性名称(例如m_first_username)。我们的一些方法访问了许多这些属性,因此我们的代码往往非常冗长: if (m_first_username->isSomethingOrOther() || m_second_username->isOtherOrSomething()... 为了使代码更易读,我的同事想要在本地范围内使用更多的std::shared_ptr &const std::shared_ptr<...> &tmp = m_first_username->returnsASharedPtr() tmp->isSomethingOrOther(); 我不同意这种做法,因为它会增加共享指针的使用计数。
如何使这段代码更易读?继续使用对shared_ptr的常量引用,使用std::weak_ptr还是接受冗长的代码行?

3
你认为 tmp->isSomethingOrOther()m_first_username->isSomethingOrOther() 更易读?你能解释一下这个逻辑吗? - nwp
2
我个人并不认为那段代码的冗长有什么问题——它看起来非常像我在过去15年中接触到的许多生产代码。如果你真的想通过使用别名使代码变得*更不可读,那么CookiePLMonster的建议对我来说似乎是合理的。 - Joris Timmermans
1
m_first_username 看起来是一个合理的名称。引入一个名为 tmp 的奇怪临时共享指针引用并不能提高可读性。 - user7860670
2
重命名变量的正确方式是auto &new_name = old_name;。预期该操作将被完全优化掉。 - nwp
1
看起来你只是过度使用了shared_ptr,而不是通过这些技巧来修补你的代码,你可以思考一下为什么这个方法不应该简单地返回一个引用/原始指针到实例。 - JVApen
显示剩余5条评论
1个回答

1
根据@nwp的评论-本地别名变量名称的正确方法是:
auto& v1 = m_first_user_name;

如果你想采用你在问题中发布的"returnAsSharedPointer"方法,那么你需要在m_first_user_name和m_second_user_name类中使用标准的C++ enable_shared_from_this
总的来说,虽然这主要是基于个人观点,但我相信大多数有经验的C++开发者会认为新代码比旧代码不太易读。 长而具有描述性的变量名没有任何问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接