SlideShare a Scribd company logo
1 of 100
Download to read offline
1
2013/06/22 Cryolite
Boost.勉強会 #12 ⼤阪
Allocators@C++11
2
2013/06/22 Cryolite
Boost.勉強会 #12 ⼤阪
Allocators@C++03
Q. アロケータとは何か?
A. メモリ割り当てを
カスタマイズする仕掛け
3
Q. アロケータとは何か?
A. メモリ割り当てを
カスタマイズする仕掛け
4
アロケータのメンバって
(de)?allocate だけですか?
5
• pointer – 割り当てたメモリを指すポ
インタ型
• allocate – メモリを割り当てる
• deallocate – メモリを開放する
• construct – オブジェクトを構築する
• destroy – オブジェクトを破壊する
• .....
アロケータのメンバって
(de)?allocate だけですか?
6
• pointer – 割り当てたメモリを指すポ
インタ型
• allocate – メモリを割り当てる
• deallocate – メモリを開放する
• construct – オブジェクトを構築する
• destroy – オブジェクトを破壊する
• .....
メモリの割り当て・解放以外もできる!
今⽇⾔いに来たこと
7
(de)?allocate をカスタ
マイズしたら終わり,とい
うそのふざけた幻想※をぶ
ち壊しにきました.
※インターネッツを利⽤した当社独⾃の調査による
C++03 のアロケータは
あんまり使えない
8
C++03 のアロケータは
あんまり使えない
あんまり使えない理由:
• オブジェクト毎の状態を持てない
9
C++03 のアロケータは
あんまり使えない
あんまり使えない理由:
• オブジェクト毎の状態を持てない
≒⾮静的データメンバを持てない
10
C++03 のアロケータは
あんまり使えない
あんまり使えない理由:
• オブジェクト毎の状態を持てない
≒⾮静的データメンバを持てない
• オブジェクト毎の状態を持てない
≒⾮静的データメンバを持てない
11
C++03 のアロケータは
あんまり使えない
あんまり使えない理由:
• オブジェクト毎の状態を持てない
≒⾮静的データメンバを持てない
• オブジェクト毎の状態を持てない
≒⾮静的データメンバを持てない
• オブジェクト毎の状態を持てない
≒⾮静的データメンバを持てない
12
なぜオブジェクト毎の状態を持てな
いような制限が C++03 のアロケー
タに対してあるのか?
重要な制約
あるアロケータの値で allocate
されたメモリは,同じアロケー
タの値で deallocate しないとい
けない.
13
アロケータと
コンテナの swap の関係
14
pointer p_;
allocator_type a_;
.....
pointer p_;
allocator_type a_;
.....
vector<Hoge> vector<Hoge>
各々の a_ は各々の p_ が
指している領域を解放できる
15
pointer p_;
allocator_type a_;
.....
pointer p_;
allocator_type a_;
.....
vector<Hoge> vector<Hoge>
swap
アロケータと
コンテナの swap の関係
16
pointer p_;
allocator_type a_;
.....
pointer p_;
allocator_type a_;
.....
vector<Hoge> vector<Hoge>
各々の a_ は各々の p_ が
指している領域について知らない
swap
アロケータと
コンテナの swap の関係
17
pointer p_;
allocator_type a_;
.....
pointer p_;
allocator_type a_;
.....
vector<Hoge> vector<Hoge>
各々の a_ は各々の p_ が
指している領域について知らない
swap
アロケータと
コンテナの swap の関係
18
pointer p_;
allocator_type a_;
.....
pointer p_;
allocator_type a_;
.....
vector<Hoge> vector<Hoge>
じゃあアロケータも
swap すれば良いじゃん?
アロケータと
コンテナの swap の関係
swap
19
template<typename T, size_t N>
class StackAllocator {
.....
char storage_[N];
};
ところが swap できない
アロケータの種類がある
ここからメモリを割り当てる
この型のアロケータ同⼠は
swap できない
Q. 状態を持ったアロケータと
swap の問題どうすんの?
A. (in C++03) 実装依存です
≒
規格がほとんど何も⾔ってないの
で,アロケータはオブジェクト毎
の状態を持てないと仮定するしか
ない.
20
Allocators@C++03 について
街の⼈の声を聞いてきました
21
22
Allocators@C++03 について
街の⼈の声を聞いてきました
23
使いどころが限定されるが
使えないわけじゃない
Allocators@C++03 について
街の⼈の声を聞いてきました
24
使いどころが限定されるが
使えないわけじゃない
良く分かってそうな感じ
Allocators@C++03 について
街の⼈の声を聞いてきました
25
Allocators@C++03 について
街の⼈の声を聞いてきました
26
Allocators@C++03 について
街の⼈の声を聞いてきました
27
Allocators@C++03 について
街の⼈の声を聞いてきました
オブジェクト毎に
情報持てなくても
そんなに深刻じゃないよ
28
深刻だろ,常識的に考えて…
Allocators@C++03 について
街の⼈の声を聞いてきました
オブジェクト毎に
情報持てなくても
そんなに深刻じゃないよ
29
Allocators@C++03 について
専⾨家の話を聞いてきました
30
Allocators@C++03 について
専⾨家の話を聞いてきました
Pablo Halpern
(アロケータ補完計画メンバ)
31
Allocators@C++03 について
専⾨家の話を聞いてきました
Pablo Halpern
(アロケータ補完計画メンバ)
標準化委員の誰かが
「単に間に合わなかっただけ」
ってゆってた
Allocators@C++03 まとめ
32
Allocators@C++03 まとめ
33
規格の⽂⾔を書くのが間に合いませんでした
34
2013/06/22 Cryolite
Boost.勉強会 #12 大阪
Allocators@C++11
規格の⽂⾔ができました
35
C++11 のアロケータでは
何が起きたか?
36
アロケータに対する
異次元(?)の制限緩和
37
アロケートノミクスの
カスタマイズ戦略3本の⽮
38
状態を持つアロケータ
Stateful allocator
スコープドアロケータモデル
Scoped allocator model
アロケータへの配慮
Allocator-awareness
制限緩和+3本の矢
=アロケータ株価の上昇
39
右肩上がり!
本発表終了時イマココ!
制限緩和+3本の矢
=アロケータ株価の上昇
40
本発表終了時イマココ!
Allocator-awareness
アロケータへの配慮
41
Allocator-awareness
アロケータへの配慮
ユーザから指定された
アロケータをちゃんと
使います.
42
アロケータへの配慮
std::vector の例 (1/2)
43
pointer p_;
.....
MyClass MyClass MyClass ・・・・・(未構築)
std::vector<MyClass>
メモリは allocate で獲得,
deallocate で解放
各 value_type オブジェクトは
construct で構築, destroy で破壊
ポインタ型はアロケータで
指定されたものを使う
44
pointer p_;
allocator_type a_;
.....
pointer p_;
allocator_type a_;
.....
vector<Hoge> vector<Hoge>
コンテナの swap のときにアロケータを
swap する・しない,を制御可
アロケータへの配慮
std::vector の例 (2/2)
(propagate_on_container_*)
45
pointer p_;
allocator_type a_;
.....
pointer p_;
allocator_type a_;
.....
vector<Hoge> vector<Hoge>
アロケータへの配慮
std::vector の例 (2/2)
コンテナの swap のときにアロケータを
swap する・しない,を制御可
(propagate_on_container_*)
アロケータへの配慮
std::list の例
46
pointer head_;
.....
MyClass v_;
pointer next_;
.....
std::list<MyClass>
_ListNode
MyClass v_;
pointer next_;
.....
_ListNode
・・・・・
状態を持つアロケータ
Stateful Allocator
47
状態を持つアロケータ
Stateful Allocator
アロケータがオブジェクト毎
の状態を持てます!
48
状態を持つアロケータ
Stateful Allocator
アロケータがオブジェクト毎
の状態を持てます!
アロケータがオブジェクト毎
の状態を持てます!
49
状態を持つアロケータ
Stateful Allocator
アロケータがオブジェクト毎
の状態を持てます!
アロケータがオブジェクト毎
の状態を持てます!
アロケータがオブジェクト毎
の状態を持てます! 50
C++11 のアロケータで
何ができるか?
51
allocate/deallocate で⾃作
汎⽤メモリアロケータ……?
52
allocate/deallocate で⾃作
汎⽤メモリアロケータ……?
malloc@glibc「ほう? 汎⽤メモリアロケータを
⾃作……ですか.」
jemalloc「我々を超えてみせる,と?」
tcmalloc「これは楽しみですなぁククク…….」
53
allocate/deallocate で⾃作
汎⽤メモリアロケータ……?
malloc@glibc「ほう? 汎⽤メモリアロケータを
⾃作……ですか.」
jemalloc「我々を超えてみせる,と?」
tcmalloc「これは楽しみですなぁククク…….」
54
死にたくないのでスキップします
55
超単純なアロケータ実装以外では
ほとんど意味なかった←結論
allocate/deallocate で⾃作
汎⽤メモリアロケータの前に
ここから初級の話その1
56
(de)?allocate をカスタマイズ
してメモリっぽいものを扱う
57
(de)?allocate をカスタマイズ
してメモリっぽいものを扱う
58
仮想ページ
仮想アドレス空間
mmap
new
shm_open
& mmap
(de)?allocate をカスタマイズ
してメモリっぽいものを扱う
59
仮想ページ
仮想アドレス空間
mmap
new
shm_open
& mmap
もしかして:Boost.Interprocessのアロケータ
(de)?allocate をカスタマイズ
してメモリっぽいものを扱う
60
仮想ページ
仮想アドレス空間
mmap
new
shm_open
& mmap
もしかして:Boost.Interprocessのアロケータ
Boost.Interprocess のアロケータは stateful
ですが, 標準のコンテナに乗せられます.
ここから初級の話その2
61
62
•メモリ使⽤総量,オブジェ
クト総数のカウント
•デバッグ⽤各種フック
•各イベントを
Boost.Signals2 で発⾏
•その他
allocate/deallocate,
construct/destroy に
フックを仕掛ける
allocate/deallocate,
construct/destroy に
フックを仕掛ける
63
•メモリ使⽤総量,オブジェ
クト総数のカウント
•デバッグ⽤各種フック
•各イベントを
Boost.Signals2 で発⾏
•その他
ここから中級の話その1
64
pointer 型をスマート
ポインタとしてカスタマイズ
65
pointer 型をスマート
ポインタとしてカスタマイズ
66
Q. アロケータを使う側が
allocate/construct に対応
する deallocate/destroy を
ちゃんと呼び出すはずだから,
スマートポインタにする必要
ないのでは?
67
int main(){
vector<int> v(a);
f(move(v));
.....
}
void f(vector v){
.....
.....
}
a.exe (デバッグビルド) b.dll (リリースビルド)
デバッグビルドの new で獲得したメモリを
リリースビルドの delete で解放><;
new/delete の
ABI ⾮互換性の克服
pointer 型をスマート
ポインタとしてカスタマイズ
68
template<typename T>
struct RobustAlloc {
typedef std::shared_ptr<T> pointer;
.....
pointer allocate(size_t n)
{
return pointer(
new char[n * sizeof(T)],
[](void *p) { delete p[]; });
}
void deallocate(pointer p, size_type n)
{ /* do nothing */ }
};
69
int main(){
RobustAlloc a;
vector<int, RobustAlloc> v(a);
f(move(v));
.....
}
void f(vector v){
.....
.....
}
a.exe (デバッグビルド) b.dll (リリースビルド)
new/delete の
ABI ⾮互換性の克服
デバッグビルドの new でメモリを獲得,
デバッグビルドの delete で解放するのでO.K.
(詳しくは 私の第1回 Boost.勉強会参照)
ここから中級の話その1.5
70
construct/destroy でコン
テナ要素の⽣成をハック
71
vector<string> v;
v.emplace(“Hello”);
呼ばれるコンストラクタは
string(“Hello”)
construct/destroy でコン
テナ要素の⽣成をハック
72
template<typename T>
struct MyAlloc {
template<typenmae... Args>
void construct(T *p, Args &&... args) {
::new ((void *)p)
(std::forward<Args>(args)...,
AnotherAlloc a_);
}
.....
AnotherAlloc a_;
};
construct/destroy でコン
テナ要素の⽣成をハック
73
template<typename T>
struct MyAlloc {
template<typenmae... Args>
void construct(T *p, Args &&... args) {
::new ((void *)p)
(std::forward<Args>(args)...,
AnotherAlloc a_);
}
.....
AnotherAlloc a_;
};
元々のコンストラクタの引数に
a_ を付け加えてコンストラクタを呼び出し
construct/destroy でコン
テナ要素の⽣成をハック
74
vector<string, MyAlloc> v;
v.emplace(“Hello”);
実際に呼ばれるコンストラクタは
string(“Hello”, a_)
construct/destroy でコン
テナ要素の⽣成をハック
75
vector<string, MyAlloc> v;
v.emplace(“Hello”);
実際に呼ばれるコンストラクタは
string(“Hello”, a_)
アロケータはコンテナ要素の構築
⽅法を完全に乗っ取ることが可能.
ここから中級の話その2
76
77
Template<typename T>
class IndirectPointer {
T **p_;
.....
T &operator*() { return **p_; }
};
Template<typename T>
class IndirectAlloc;
アロケータカスタマイズに
よる ptr_containers
78
Template<typename T>
IndirectAlloc<T>::allocate;
sizeof(T) * n バイトではなく
sizeof(T *) * n バイトを確保
アロケータカスタマイズに
よる ptr_containers
79
Template<typename T>
IndirectAlloc<T>::allocate;
Template<typename T>
IndirectAlloc<T>::construct;
sizeof(T) * n バイトではなく
sizeof(T *) * n バイトを確保
(T 型のオブジェクト)
アロケータカスタマイズに
よる ptr_containers
80
vector<int, IndirectAlloc<int> > v;
// boost::ptr_vector<int> 相当
list<int, IndirectAlloc<int> > l;
// boost::ptr_list<int> 相当
アロケータカスタマイズに
よる ptr_containers
アロケータカスタマイズに
よる ptr_containers
81
vector<int, IndirectAlloc<int> > v;
// boost::ptr_vector<int> 相当
list<int, IndirectAlloc<int> > l;
// boost::ptr_list<int> 相当
さらにアロケータの construct を加工し
て, factory に転送して動的多相な形で
コンテナの要素を乗せることが可能.
ここから上級の話
Scoped Allocator Model
82
vector<string> v;
83
vector<string> に string を
追加し続ける例
プログラム中のいろんな場所から
参照され,要素が追加されると仮定
vector<string> v;
84
v.emplace_back(“hoge”);
v.emplace_back(“fuga”);
vector<string> に string を
追加し続ける例
vector の部分はメモリの再割り当て
が必要だが, string の部分は超単純
な割り当て戦略でよい.
vector<string> v;
85
vector<string> に string を
追加し続ける例
86
(外側のアロケータ)
デフォルトのアロケータとして振る舞う
(内側のアロケータ)
単純なアロケータ(リージョン・アリーナ)
として振る舞う
ネストされたアロケータ
vector<string> に string を
追加し続ける例
87
(外側のアロケータ)
デフォルトのアロケータとして振る舞う
construct で内側のアロケータを引数に追加
(内側のアロケータ)
単純なアロケータ(リージョン・アリーナ)
として振る舞う
NestedAllocator
vector<string> に string を
追加し続ける例
vector<string> に string を
追加し続ける例
88
vector<string, NestedAlloc<string> > v;
v.emplace_back(“hoge”);
v.emplace_back(“fuga”);
v
string “hoge”
“fuga”
・
・
・
string
・
・
・外側のアロケータの
メモリリソース
内側のアロケータの
メモリリソース
今⽇⾔いに来たこと(再掲)
89
アロケータは
(de)?allocate をカスタ
マイズしたら終わりではあ
りません.
allocate/deallocate を
カスタマイズする前に
90
超単純なアロケータ実装以外では
ほとんど意味なかった←結論
超単純なアロケータとは?
Region/Arena Allocator
91
メモリをドバっと確保して
92
先頭から順に確保
超単純なアロケータとは?
Region/Arena Allocator
93
先頭から順に確保
超単純なアロケータとは?
Region/Arena Allocator
94
先頭から順に確保
超単純なアロケータとは?
Region/Arena Allocator
これからのアロケータ
95
アロケータのカスタマイズに
よる最⼤の弊害
96
アロケータのカスタマイズ
=
型を変える
=
オブジェクト同⼠の
相互運⽤性低下
型消去による動的多相アロケー
タ – polymorphic_allocator
97
アロケータのカスタマイズ
しつつ,型を消去してオブ
ジェクト同⼠の相互運⽤性
を維持する
polymorphic_allocator まとめ
98
規格の⽂⾔を書くのが間に合いませんでした
polymorphic_allocator まとめ
99
規格の⽂⾔を書くのが間に合いませんでした
100
201z/xx/yy Cryolite
Boost.勉強会 #n 大阪
Allocators@C++14
coming soon...
1z

More Related Content

What's hot

MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門torisoup
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術
WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術
WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術Yoshiaki Sugimoto
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NETterurou
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~UnityTechnologiesJapan002
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれKumazaki Hiroki
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方Daisaku Mochizuki
 
IL2CPPに関する軽い話
IL2CPPに関する軽い話IL2CPPに関する軽い話
IL2CPPに関する軽い話Wooram Yang
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理Norishige Fukushima
 
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説するTaishiYamada1
 
パネルディスカッション:WebXRメタバースの挑戦 in CEDEC2022 ~Mozilla Hubs活用事例と課題共有~
パネルディスカッション:WebXRメタバースの挑戦 in CEDEC2022 ~Mozilla Hubs活用事例と課題共有~パネルディスカッション:WebXRメタバースの挑戦 in CEDEC2022 ~Mozilla Hubs活用事例と課題共有~
パネルディスカッション:WebXRメタバースの挑戦 in CEDEC2022 ~Mozilla Hubs活用事例と課題共有~GREE VR Studio Lab
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションMasahiko Sawada
 

What's hot (20)

MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術
WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術
WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
Oss貢献超入門
Oss貢献超入門Oss貢献超入門
Oss貢献超入門
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方
 
IL2CPPに関する軽い話
IL2CPPに関する軽い話IL2CPPに関する軽い話
IL2CPPに関する軽い話
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理
 
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
 
パネルディスカッション:WebXRメタバースの挑戦 in CEDEC2022 ~Mozilla Hubs活用事例と課題共有~
パネルディスカッション:WebXRメタバースの挑戦 in CEDEC2022 ~Mozilla Hubs活用事例と課題共有~パネルディスカッション:WebXRメタバースの挑戦 in CEDEC2022 ~Mozilla Hubs活用事例と課題共有~
パネルディスカッション:WebXRメタバースの挑戦 in CEDEC2022 ~Mozilla Hubs活用事例と課題共有~
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 

More from Cryolite

左と右の話
左と右の話左と右の話
左と右の話Cryolite
 
Lambda in template_final
Lambda in template_finalLambda in template_final
Lambda in template_finalCryolite
 
家に帰るまでが遠足です
家に帰るまでが遠足です家に帰るまでが遠足です
家に帰るまでが遠足ですCryolite
 
Destructive Call
Destructive CallDestructive Call
Destructive CallCryolite
 
Boost.PropertyMap (.pptx)
Boost.PropertyMap (.pptx)Boost.PropertyMap (.pptx)
Boost.PropertyMap (.pptx)Cryolite
 
Boost.PropertyMap (.pdf)
Boost.PropertyMap (.pdf)Boost.PropertyMap (.pdf)
Boost.PropertyMap (.pdf)Cryolite
 
shared_ptr & weak_ptr (ppt 第2版, DL 専用)
shared_ptr & weak_ptr (ppt 第2版, DL 専用)shared_ptr & weak_ptr (ppt 第2版, DL 専用)
shared_ptr & weak_ptr (ppt 第2版, DL 専用)Cryolite
 
shared_ptr & weak_ptr (ppt 初版, DL 専用)
shared_ptr & weak_ptr (ppt 初版, DL 専用)shared_ptr & weak_ptr (ppt 初版, DL 専用)
shared_ptr & weak_ptr (ppt 初版, DL 専用)Cryolite
 

More from Cryolite (8)

左と右の話
左と右の話左と右の話
左と右の話
 
Lambda in template_final
Lambda in template_finalLambda in template_final
Lambda in template_final
 
家に帰るまでが遠足です
家に帰るまでが遠足です家に帰るまでが遠足です
家に帰るまでが遠足です
 
Destructive Call
Destructive CallDestructive Call
Destructive Call
 
Boost.PropertyMap (.pptx)
Boost.PropertyMap (.pptx)Boost.PropertyMap (.pptx)
Boost.PropertyMap (.pptx)
 
Boost.PropertyMap (.pdf)
Boost.PropertyMap (.pdf)Boost.PropertyMap (.pdf)
Boost.PropertyMap (.pdf)
 
shared_ptr & weak_ptr (ppt 第2版, DL 専用)
shared_ptr & weak_ptr (ppt 第2版, DL 専用)shared_ptr & weak_ptr (ppt 第2版, DL 専用)
shared_ptr & weak_ptr (ppt 第2版, DL 専用)
 
shared_ptr & weak_ptr (ppt 初版, DL 専用)
shared_ptr & weak_ptr (ppt 初版, DL 専用)shared_ptr & weak_ptr (ppt 初版, DL 専用)
shared_ptr & weak_ptr (ppt 初版, DL 専用)
 

Allocators@C++11