Borrowed Interface Lifetime Safety

#include <iostream>
using namespace std;

class Driver {
public:
    virtual void transfer() = 0;
    virtual ~Driver() {}
};

class SpiDriver : public Driver {
public:
    void transfer() override {
        cout << "SPI transfer completed" << endl;
    }
};

class I2cDriver : public Driver {
public:
    void transfer() override {
        cout << "I2C transfer completed" << endl;
    }
};

// Framework borrows driver interface
Driver* g_driver = nullptr;

void registerDriver(Driver& driver) {
    g_driver = &driver;
}

void frameworkRun() {
    g_driver->transfer();
}

int main() {
    int mode;
    cin >> mode;
    SpiDriver spi;
    I2cDriver i2c;
    if (mode == 0) {
        registerDriver(spi);
    } else {
        registerDriver(i2c);
    }

    // Driver object may already be destroyed here
    frameworkRun();

    return 0;
}

Solving Approach

 

 

 

 

 

Upvote
Downvote
Loading...

Input

0

Expected Output

SPI transfer completed