とりあえずcURLをいじってみた。
#include <iostream> #include <curl/curl.h> #define DEBUG(s) do { cerr << (s) << endl; } while(0) using namespace std; class Curl { private: CURL *handle; string url; string buf; static size_t puts(char *ptr, size_t size, size_t nmemb, void *stream); public: Curl(string url); ~Curl(); CURLcode perform(); string data(); }; size_t Curl::puts(char *ptr, size_t size, size_t nmemb, void *stream) { string *buf = static_cast<string *>(stream); buf->append(ptr); return size * nmemb; } Curl::Curl(string url) : handle(curl_easy_init()), url(url) { curl_easy_setopt(this->handle, CURLOPT_WRITEDATA, &(this->buf)); curl_easy_setopt(this->handle, CURLOPT_WRITEFUNCTION, &puts); curl_easy_setopt(this->handle, CURLOPT_URL, this->url.c_str()); } Curl::~Curl() { curl_easy_cleanup(handle); } CURLcode Curl::perform() { return curl_easy_perform(this->handle); } string Curl::data() { return this->buf; } int main() { curl_global_init(CURL_GLOBAL_ALL); Curl curl("http://www.hatena.ne.jp/"); curl.perform(); cout << curl.data() << endl; }
分からないこと多いなぁ…
- puts()をstaticじゃなくしたらハマった。なんで?
- マクロ使うのはありなのかしらん?
- staticな文字列でメンバ変数を初期化したら、メンバ変数のメモリ領域はいつ開放されるんだろう?
- ポインタじゃないメンバ変数を返したら、コピーが返るのか?
- その場合、メモリはいつ解放されるん?