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) {
        bus.write(addr, val);
    }

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

class SystemController {
private:
    
    Clock clk;
    Bus bus;
    Driver driver;

public:
    
    SystemController(): driver(bus), bus(clk){

    }

    void run(int addr, int val) {
        driver.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