以前に割り当てられたメモリブロックからオブジェクトの配列を構築する必要があります。しかし、ブロックのサイズが必要なので、ブロックを割り当てるときには、ユーザの観点からは、どのように::operator new[]()
が::operator new()
と異なるのか理解できません。次の例では、いずれかを使用すると同じ効果があるようです。何か不足していますか?どのように:: operator new()()と:: operator new()の違いは何ですか?
class J {
};
int main() {
const int size = 5;
{
J* a = static_cast<J*> (::operator new[](sizeof (J) * size));
for (int i = 0; i < size; i++)
new (&a[i]) J();
for (int i = 0; i < size; i++)
a[i].~J();
::operator delete[] (a);
}
{
J* a = static_cast<J*> (::operator new(sizeof (J) * size));
for (int i = 0; i < size; i++)
new (&a[i]) J();
for (int i = 0; i < size; i++)
a[i].~J();
::operator delete (a);
}
}
[別の "演算子new \ [\]"を持つ目的は何ですか?(http://stackoverflow.com/questions/2499895/whats-the-purpose-of-having-a-separate -operator-new) –
私は同じとは思わない。そこにOPは違いが何であるかを知っていて、理由を尋ねていました。ここでOPは違いが何であるかを尋ねる。 C++に慣れ親しんでいる人にとっては、混乱しやすいですが、確かに同じ質問ではありません。 – littleadv
@littleadv:私はそれを見ています(あなたのコメントを考慮した後も)、まったく同じ質問です。 –