RAII Shutdown Ordering

#include <iostream>
using namespace std;

class Clock {
public:
    Clock() {
        cout << "Clock enabled" << endl;
    }

    ~Clock() {
        cout << "Clock disabled" << endl;
    }
};

class Bus {
private:
    Clock& clk;
public:
    Bus(Clock& c) : clk(c) {
        cout << "Bus initialized" << endl;
    }

    ~Bus() {
        cout << "Bus stopped" << endl;
    }

    void write(int addr, int val) {
        cout << "Bus write: " << addr << " " << val << endl;
    }
};

class Driver {
private:
    Bus& bus;
public:
    Driver(Bus& b) : bus(b) {
        cout << "Driver started" << endl;
    }

    void operate(int addr, int val) {
        // perform bus write
        bus.write(addr, val);
    }

    ~Driver() {
        cout << "Driver stopped" << endl;
    }
};

class SystemController {
private:
    Clock clk;
    Bus bus;
    Driver drv;
public:
    // Constructor should set up dependencies
    SystemController() : bus(clk) , drv(bus) {}

    void run(int addr, int val) {
        // trigger driver operation
        drv.operate(addr, val);
    }
};

int main() {
    int addr, val;
    cin >> addr >> val;

    {
        SystemController sys;
        sys.run(addr, val);
    }

    return 0;
}

Solving Approach

 

 

 

 

Upvote
Downvote
Loading...

Input

5 10

Expected Output

Clock enabled Bus initialized Driver started Bus write: 5 10 Driver stopped Bus stopped Clock disabled