引用代替吸气剂?

2023-12-04

在 C++ 中使用引用代替 getter 是一种不好的做法吗?

例如:

class X
{
    int mP;
 public:
    const int& P;
    X():P(mP){}
}; 

然后

X xl;
int h = xl.P;

只需考虑重构以使访问线程安全,这种方式不会很好地工作,并且需要对客户端类/函数进行大量更改。

如果您有类成员,保证在实例的生命周期内不会更改,您只需提供const int P;并在类的构造函数中正确初始化它。

如果该值在类范围内可见,请使用static const int P;

在任何其他情况下,请使用公共 getter:

int P() const; // a return type of 'const int &' would be redundant  

第一次拍摄实施:

int X::P() const
{
    return mP;
}

线程安全的实现:

class X {
{
    // ...
private:
    // ...
    mutable std::mutex internalDataGuard;
};

int X::P() const
{
    std::lock(internalDataGuard);
    return mP;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

引用代替吸气剂? 的相关文章

随机推荐

  • 模板化 Maven 原型

    我正在创建自己的 Maven 原型 这是我使用的项目的通用模板 在该模板中 我有许多 exec maven plugin 块 实际上每个项目都有所不同 这意味着在一个项目中我可能有 2 个 exec maven plugin 块 而在另一个
  • 创建一个基于 libreoffice 文本的数据源并使用 java 设置设置

    我需要在 Java 中创建一个 LibreOffice 基于文本的数据源 我的需求是向用户提供一个包含标题行和 n 个值行的 csv 文件 此 csv 文件是执行邮件合并作业的数据源 如果我使用 LibreOffice 向导手动创建数据源来
  • 通过 Asmack 发送 Image 时创建消息

    我在通过 XMPP 发送图像时遇到一个问题 下面是我完成的代码片段 我不知道代码有什么问题 Message msg new Message emailId Message Type chat ImageTransferExtension t
  • x86,BYTE 和 BYTE PTR 之间的区别

    这两行有什么区别 这里 PTR 发生了什么变化 first mov BYTE ecx 0 second mov BYTE PTR ecx 0 概括 NASM YASM 要求word ecx 当另一个操作数未隐含操作数大小时 否则 ecx i
  • CodeIgniter Upload 类 PDF 文件类型不允许

    在本地工作 但在我尝试过的两台服务器上显示相同的错误消息 使用 Codeigniter 2 1 3 private function upload file config upload path uploads config allowed
  • Kerberos aes-256 加密不起作用

    服务器是RHEL7 Kerberos是AD Windows 我只是KDC的客户 Arcfour hmac 工作正常 但是当我将加密类型更改为 aes 256 并设置新的密钥表时 kinit 仍然可以工作 但 kvno 不能 即使用户似乎拥有
  • 如何在不打电话的情况下从另一个应用程序中打开电话应用程序?

    我试图从我正在制作的应用程序中仅打开 电话 应用程序 而无需拨打号码 我试过了 NSString stringURL tel 但它什么也没做 任何人都有正确的解决方案 我见过关于这个主题的其他问题 但没有一个有效 这适用于打开短信应用程序
  • python 仅记录特定级别

    我使用 python 日志记录模块在 python 代码中记录事件 我也想记录 2 个日志文件 一个包含用户信息 另一个是供开发人员使用的更详细的日志文件 我已将两个日志文件设置为我想要的级别 usr log INFO 和 dev log
  • 为什么 NumPy 高级索引对列表列表和 numpy 数组产生不同的结果?

    我对 NumPy 的高级索引有疑问 I found this问题 但我想我的问题略有不同 在下面的例子中x array是预期的结果 但是当我对列表进行相同的尝试时 结果不同 来自 numpy 文档 当选择对象 obj 是 非元组序列对象 一
  • 是否可以覆盖所有媒体查询?

    我已经构建了一个响应式网站 其中包含针对不同移动设备的媒体查询 但希望在较小的设备上提供 覆盖所有 链接 单击时 该链接将删除所有媒体查询样式并将页面重置为默认样式 以 1024 像素宽的方式显示网站 有办法实现这一点吗 执行此操作的唯一方
  • android studio 3.3 创建新项目后在预览窗口中不显示操作栏和状态栏

    android studio 3 3 在创建新项目后未在预览窗口中显示操作栏和状态栏 我已经在 build graadle module app 文件中尝试过此操作 implementation com android support ap
  • 一条sql语句中的多个select

    我有一个调查答案表 例如 date q1 q2 12 12 10 yes no 12 13 10 no no 我想创建一个查询来获取该表的结果摘要 从而允许我设置相关的日期范围 我下面的声明几乎有效 SELECT SELECT Count
  • 控制器外部的 Orchard 主题属性

    我有一项服务将覆盖响应正文的内容 是否可以在覆盖内容的方法中使用主题 Themed public void forbiddenAlert IHttpContextAccessor Hca overriding response body 不
  • 在不暴露源的情况下将 AWS API Gateway 与 Cloud Front 集成

    我正在开发一个无服务器架构的项目 我发现虽然AWS说API Gateway可以保护您的资源免受DDoS攻击 但如果有坏用户不断向您的服务发送垃圾邮件 API网关无法提供适当的方法来处理此类问题 所以我开始思考我能做什么 AWS WAF 显然
  • R 中具有动态条件的子集数据

    我有一个包含 2500 行的数据集 其中都是银行贷款 每笔银行贷款都有未偿还金额和抵押品类型 房地产 机床等 我需要从该数据集中随机选择一个 例如未偿金额总和 250 万 5 以及相同资产类别的最大 25 贷款 我找到了函数 optim 但
  • Angular 6 FormGroup.disable() 方法不适用于我的模板驱动的 NgForm

    当我尝试在 Angular 6 应用程序中的 formGroup 上使用禁用方法时 我在浏览器控制台中收到此错误 类型错误 this personForm disable 不是一个函数 Although the method is ment
  • Google Speech API 的 Base64 解码失败

    我尝试发送 POST 请求至https speech googleapis com v1 speech recognize使用 JSON 和下面的代码片段 不知何故 谷歌回应说无法解码我的请求中的 Base 64 配置 编码 LINEAR1
  • 鸡蛋掉落拼图 - 需要建议

    问题陈述 掉蛋是指一类问题 其中重要的是找到正确的响应而不超过某些失败状态的 低 数量 在一个玩具示例中 有一座地板塔和一个装有理想鸡蛋的滴蛋器 理想鸡蛋的物理特性是 如果从地板或上方掉落 它会碎裂 如果从地板或下方掉落 则不会造成任何损坏
  • 浏览器后退按钮的注销问题

    我使用 ASP Net MVC 4 创建了登录 注销功能 我使用自己创建的表单根据 Active Directory 对用户进行身份验证 它的功能运行良好 安全方面仍然存在一个大问题 用户单击注销链接后 他 她成功注销并再次重定向到登录表单
  • 引用代替吸气剂?

    在 C 中使用引用代替 getter 是一种不好的做法吗 例如 class X int mP public const int P X P mP 然后 X xl int h xl P 只需考虑重构以使访问线程安全 这种方式不会很好地工作 并