C++のクラスをconfig構造体の代わりに利用する
C++プログラマたるもの、とりあえず、config構造体をclassにしたい。しかしながら、create関数でコンストラクタを呼ぶのは良いものの、デストラクタはどうやって呼ぶのか。どうやら、apr_pool_userdata_setを使うのがミソのようです(未テスト)。
class helloworld_per_dir_config { public: static void* create(apr_pool_t* p, char* arg) { helloworld_per_dir_config* conf = new helloworld_per_dir_config(); // pool解放時にデストラクタを呼んでもらいます apr_pool_userdata_set(conf, "helloworld_per_dir_config::create", cleanup, p); return conf; } ... private: const char* message; // 表示するメッセージ // 初期化 helloworld_per_dir_config() : message("") { } // 後片付け関数 static apr_status_t cleanup(void* pthis) { helloworld_per_dir_config* conf = (helloworld_per_dir_config*)pthis; delete conf; } // 呼んではだめです helloworld_per_dir_config(const helloworld_per_dir_config&); helloworld_per_dir_config& operator=(const helloworld_per_dir_config&); }; module AP_MODULE_DECLARE_DATA helloworld = { STANDARD20_MODULE_STUFF, helloworld_per_dir_config::create, ....