わんくま同盟茶藝部顧問

episthmh

episteme@cppll.jp

Microsoft MVP for Visual C++ (2004~)
本日、CodeZine
に載りました♪
auto_ptr は deprecated
 make_unique (C++14) が
一足お先に Visual Studio 2013 に

{

unique_ptr<foo> pfoo(new foo(“adam”,10));
foo* p = pfoo.get();
pfoo->mem_fun();
(*pfoo).mem_fun();
…
// デストラクタが”内包するポイン...
{

unique_ptr<foo[]> afoo(new foo[4]);
for ( int i = 0; i < 4; ++i ) {
afoo[i].mem_fun();
}
// デストラクタが”内包するポインタ”を
delete[]...
{

auto pfoo = make_unique<foo>(“adam”,10);
auto afoo = make_unique<foo[]>(4);
…
}
unique_ptr<foo> p;
unique_ptr<foo> q;
p = q; // error!(見た目はcopy/挙動はmove)
p = std::move(q); // OK
※ unique_ptr& operator=(c...
namespace std {
template<class T,
class D=default_delete<T>>
class unique_ptr;
template<class T>
struct default_delete {
/...
template<>
struct std::default_delete<FILE> {
void operator()(FILE* p) const
{ fclose(p); }
};
{
auto fp = unique_ptr<FILE...
{
typedef
unique_ptr<FILE,function<void(FILE*)>>
unique_file;

auto fp = unique_file(
fopen(“foo.txt”,”w”),
[](FILE* fp){f...
Prochain SlideShare
Chargement dans…5
×

Episteme unique_ptr

580 vues

Publié le

- 2013.11.02 C++例外安全Day@大阪
- 2013.11.09 わんくま同盟東京勉強会#85
- 2013.11.14 歌舞伎座.tech #2

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
580
Sur SlideShare
0
Issues des intégrations
0
Intégrations
6
Actions
Partages
0
Téléchargements
3
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Episteme unique_ptr

  1. 1. わんくま同盟茶藝部顧問 episthmh episteme@cppll.jp Microsoft MVP for Visual C++ (2004~)
  2. 2. 本日、CodeZine に載りました♪
  3. 3. auto_ptr は deprecated  make_unique (C++14) が 一足お先に Visual Studio 2013 に 
  4. 4. { unique_ptr<foo> pfoo(new foo(“adam”,10)); foo* p = pfoo.get(); pfoo->mem_fun(); (*pfoo).mem_fun(); … // デストラクタが”内包するポインタ”をdeleteする }
  5. 5. { unique_ptr<foo[]> afoo(new foo[4]); for ( int i = 0; i < 4; ++i ) { afoo[i].mem_fun(); } // デストラクタが”内包するポインタ”を delete[]する }
  6. 6. { auto pfoo = make_unique<foo>(“adam”,10); auto afoo = make_unique<foo[]>(4); … }
  7. 7. unique_ptr<foo> p; unique_ptr<foo> q; p = q; // error!(見た目はcopy/挙動はmove) p = std::move(q); // OK ※ unique_ptr& operator=(const unique_ptr&) = delete; そのかわり unique_ptr& operator=(unique_ptr&&); // 右辺値参照!
  8. 8. namespace std { template<class T, class D=default_delete<T>> class unique_ptr; template<class T> struct default_delete { // ポインタを手放す際にコレ↓を発動する void operator()(T* p) const { delete p; } } }
  9. 9. template<> struct std::default_delete<FILE> { void operator()(FILE* p) const { fclose(p); } }; { auto fp = unique_ptr<FILE>(fopen(“foo.txt”,”w”)); fprintf(fp.get(), “Hello, worldn”); // 自動的に fclose! }
  10. 10. { typedef unique_ptr<FILE,function<void(FILE*)>> unique_file; auto fp = unique_file( fopen(“foo.txt”,”w”), [](FILE* fp){fclose(fp);}); // 後始末のしかたをlambdaで与える fprintf(fp.get(), “Hello, worldn”); // 自動的に fclose! }

×