回答編集履歴

3

update

2020/04/10 08:25

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -57,3 +57,53 @@
57
57
  > Otherwise, such a pointer refers to allocated storage [...]
58
58
 
59
59
  > Indirection through such a pointer is permitted but [...]
60
+
61
+
62
+
63
+ Exampleの解釈としては:
64
+
65
+ ```C++
66
+
67
+ void B::mutate() {
68
+
69
+ new (this) D2; // reuses storage — ends the lifetime of *this
70
+
71
+ f(); // undefined behavior
72
+
73
+ // this->f(); つまり非staticメンバ関数呼び出し
74
+
75
+ // 条件(6.2)に該当するためundefined behavior
76
+
77
+ ... = this; // OK, this points to valid memory
78
+
79
+ // ポインタ値 this の利用はOK(Otherwise~の文)
80
+
81
+ }
82
+
83
+
84
+
85
+ void g() {
86
+
87
+ void* p = std::malloc(sizeof(D1) + sizeof(D2));
88
+
89
+ B* pb = new (p) D1;
90
+
91
+ pb->mutate();
92
+
93
+ *pb; // OK: pb points to valid memory
94
+
95
+ // 条件(6.1)~(6.5)いずれも該当せずOK(Indirection~の文)
96
+
97
+ void* q = pb; // OK: pb points to valid memory
98
+
99
+ // ポインタ値 pb をvoid*と扱うのはOK(Otherwise~の文)
100
+
101
+ pb->f(); // undefined behavior, lifetime of *pb has ended
102
+
103
+ // pb->f(); は非staticメンバ関数呼び出し
104
+
105
+ // 条件(6.2)に該当するためundefined behavior
106
+
107
+ }
108
+
109
+ ```

2

refinement

2020/04/10 08:24

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
 
19
- 近い概念としては、「あるオブジェクト#1の生存期間(lifetime)が終了したあとに、同オブジェクト#1が占めていたストレージ上に生成したオブジェクト#2を指すポインタ」でしょうか。
19
+ 近い概念としては、「あるオブジェクト#1の生存期間(lifetime)が終了したあとに、同オブジェクト#1が占めていたストレージ上にオブジェクト#2が生成されている、その同ストレージへのポインタ」でしょうか。
20
20
 
21
21
 
22
22
 

1

update

2020/04/10 08:11

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -13,10 +13,6 @@
13
13
  - 生成(construction)から破壊(destruction)されるまでの 生存期間(lifetime) では、一定のストレージ(storage)を占有します。
14
14
 
15
15
  - 名前(name) を付けられます。("名無しのオブジェクト"もあります)
16
-
17
-
18
-
19
- つまり「lifetime が終了し、かつ storage が他のオブジェクトによって再利用されたオブジェクト」はそもそも存在えしません。
20
16
 
21
17
 
22
18
 
@@ -44,7 +40,7 @@
44
40
 
45
41
  > (主語)
46
42
 
47
- > "**any pointer that represents the address of the storage location** where the object will be or was located"
43
+ > **any pointer that represents the address of the storage location** where the object will be or was located
48
44
 
49
45
  > (述語)
50
46