2008-02 << 2008-03 >> 2008-04

2008-03-19 (水)

*C++

昔書いたC++のプログラムに面白いものがあった.参照をtypedefしてハンドルのように使っている.某スクリーンセーバのプラグインのインターフェイスを設計したときに試しに書いたものっぽい.

#include <iostream>
using namespace std;

typedef class C1 &C;
class C1 {
protected:
    C1(){ cout << "C1()" << endl; }
    virtual ~C1(){ cout << "~C1()" << endl; }
public:
    static C get(){return *new C1;}
    void release(){delete this;}
};

class C2 : public C1 {
protected:
    C2(){ cout << "C2()" << endl; }
    ~C2(){ cout << "~C2()" << endl; }
public:
    static C get(){return *new C2;}
};

int main(){
    C c=C2::get();
    c.release();
    return 0;
}

STLとかと一緒に使うと面倒なことになりそうだ….