Saya biasanya mencoba mengutarakan berbagai hal secara berbeda untuk membedakan keduanya sedikit lebih baik, tetapi ini adalah pertanyaan yang bagus.
Operator new adalah fungsi yang mengalokasikan memori mentah - setidaknya secara konseptual, tidak jauh berbeda dengan malloc()
. Meskipun ini cukup tidak biasa kecuali Anda menulis sesuatu seperti wadah Anda sendiri, Anda dapat menghubungi operator baru secara langsung, seperti:
char *x = static_cast<char *>(operator new(100));
Ini juga memungkinkan untuk membebani operator baru baik secara global, atau untuk kelas tertentu. IIRC, tandatangannya adalah:
void *operator new(size_t);
Tentu saja, jika Anda membebani operator baru (baik global atau untuk kelas), Anda juga ingin / perlu membebani operator yang cocok hapus juga. Untuk apa nilainya, ada juga operator terpisah baru [] yang digunakan untuk mengalokasikan memori untuk array - tetapi Anda hampir pasti lebih baik mengabaikan seluruh kekacauan itu sepenuhnya.
Operator baru adalah apa yang biasanya Anda gunakan untuk membuat objek dari toko gratis:
my_class *x = new my_class(0);
Perbedaan antara keduanya adalah operator new hanya mengalokasikan memori mentah, tidak ada yang lain. Operator new memulai dengan menggunakan operator new untuk mengalokasikan memori, tetapi kemudian memanggil konstruktor untuk jenis objek yang tepat, sehingga hasilnya adalah objek nyata yang dibuat dalam memori tersebut. Jika objek itu berisi objek lain (baik tertanam atau sebagai kelas dasar) konstruktor tersebut juga dipanggil.