VC++10の標準C++準拠っぷりを調べるべく、C++0Xの規格書:N3090あたりをつらつら
と眺めております。
先だってから評判の芳しくなかった auto_ptr が deprecated扱いになってますな。
つまりは「いつ標準から消えても文句ゆーなよな」てーことで。
代わりといってはなんですが、新たに unique_ptr が導入されてます。
こいつが面白くてね、デストラクタを外付けにできるです。
#include <iostream>
#include <memory>
#include <cstdio>
using namespace std;
// 外付けデストラクタ
struct file_closer {
void operator()(FILE* fp) { fclose(fp); puts("closed."); }
};
int main() {
unique_ptr<FILE,file_closer> file_ptr(fopen("foo.cpp","r"));
char buf[256];
for ( int i = 0; i < 5; ++i ) {
fgets(buf,256,file_ptr.get());
cout << buf;
}
}
地味ぃに便利です。
あとね、auto_ptrではnew[]したポインタをdelete[]できませんでした。
んでも unique_ptrならだいぢょぶ。
class foo {
public:
~foo() { std::cout << "ひぎぃ"; }
};
int main() {
std::uniqur_ptr<foo[]> foos(new foo[3]);
...
} // ちゃんと三回"ひぎぃ"て鳴きます
普通ぅに便利です。