MST
星途 面试题库

面试题:C++中类成员访问属性安全性保障之高级难度

假设你正在开发一个金融类库,其中有一个`Account`类用于管理账户信息,包括账户余额等敏感数据。为了保障数据安全,要求仅允许通过特定的成员函数修改账户余额,并且在多线程环境下也要保证操作的原子性和一致性。请描述如何设计`Account`类的成员访问属性以及相关的同步机制来实现这些要求,并给出关键代码示例。
15.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 成员访问属性设计
    • 将账户余额等敏感数据设为私有成员变量,这样外部代码无法直接访问和修改,只能通过特定的成员函数来操作。
  2. 同步机制
    • 使用互斥锁(std::mutex)来保证在多线程环境下对账户余额操作的原子性和一致性。每次在修改或读取账户余额前锁定互斥锁,操作完成后解锁。
    • 对于C++17及以上,还可以使用std::scoped_lock,它会在构造时自动锁定互斥锁,在析构时自动解锁,更方便且安全。
  3. 关键代码示例(C++)
#include <mutex>
#include <iostream>

class Account {
private:
    double balance;
    std::mutex mtx;

public:
    Account(double initialBalance) : balance(initialBalance) {}

    // 获取账户余额
    double getBalance() {
        std::scoped_lock lock(mtx);
        return balance;
    }

    // 修改账户余额
    void deposit(double amount) {
        std::scoped_lock lock(mtx);
        if (amount > 0) {
            balance += amount;
        }
    }

    bool withdraw(double amount) {
        std::scoped_lock lock(mtx);
        if (amount > 0 && balance >= amount) {
            balance -= amount;
            return true;
        }
        return false;
    }
};