teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

追記

2018/07/31 06:30

投稿

strike1217
strike1217

スコア651

title CHANGED
File without changes
body CHANGED
@@ -195,5 +195,5 @@
195
195
  │111 return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp))); │
196
196
  │112 }
197
197
  ```
198
- おそらく、線形listのに、newを使って新たに領域を作り、そのポインタを連結させているんですかね・・・
198
+ おそらく、線形listのように、newを使って新たに領域を作り、そのポインタを連結させているんですかね・・・
199
199
  つまり・・・newで作成した領域を随時増やす、reallocみたいな関数はnewでは実現不可能・・・ということですかね。

1

追記

2018/07/31 06:30

投稿

strike1217
strike1217

スコア651

title CHANGED
File without changes
body CHANGED
@@ -173,4 +173,27 @@
173
173
  これは・・・コンストラクタの方に、std::initializer_listがありませんが・・・
174
174
  これは、それぞれ、new C(0); new C(0, 0);と同値である。と考えて良いんですか??
175
175
 
176
- 分かる方教えてください。環境は、g++ Linuxです。
176
+ 分かる方教えてください。環境は、g++ Linuxです。
177
+
178
+ ---
179
+ [追記]
180
+ vectorが伸びているのは、再度newを呼び出していました。
181
+ ```ここに言語を入力
182
+ pointer │
183
+ │99 allocate(size_type __n, const void* = static_cast<const void*>(0)) │
184
+ │100 { │
185
+ >│101 if (__n > this->max_size()) │
186
+ │102 std::__throw_bad_alloc(); │
187
+ │103 │
188
+ │104 #if __cpp_aligned_new │
189
+ │105 if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) │
190
+ │106 { │
191
+ │107 std::align_val_t __al = std::align_val_t(alignof(_Tp)); │
192
+ │108 return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp), __al)); │
193
+ │109 } │
194
+ │110 #endif │
195
+ │111 return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp))); │
196
+ │112 }
197
+ ```
198
+ おそらく、線形listの用に、newを使って新たに領域を作り、そのポインタを連結させているんですかね・・・
199
+ つまり・・・newで作成した領域を随時増やす、reallocみたいな関数はnewでは実現不可能・・・ということですかね。