class Interface {
public:
virtual void process() = 0;
virtual ~Interface() = default;
};
class RealSubject : public Interface {
public:
void process() override {
cout << "doing" << endl;
}
};
class Proxy : public Interface {
private:
RealSubject *realSubject;
public:
Proxy() {
realSubject = new RealSubject;
}
~Proxy() {
delete realSubject;
}
void process() override {
cout << "before" << endl;
realSubject->process();
cout << "after" << endl;
}
};
int main() {
Interface *proxy = new Proxy();
proxy->process();
delete proxy;
}