Genelde ikisini biraz daha iyi ayırt etmek için her şeyi farklı bir şekilde ifade etmeye çalışırım, ancak bu her durumda iyi bir soru.
Yeni operatör, ham belleği ayıran bir işlevdir - en azından kavramsal olarak, bundan çok da farklı değildir malloc()
. Kendi konteynırınız gibi bir şey yazmadığınız sürece oldukça sıra dışı olsa da, operatörü aşağıdaki gibi doğrudan yeni arayabilirsiniz:
char *x = static_cast<char *>(operator new(100));
Operatörün yeni global olarak veya belirli bir sınıf için aşırı yüklenmesi de mümkündür. IIRC, imza:
void *operator new(size_t);
Elbette, yeni bir operatörü aşırı yüklerseniz (global veya bir sınıf için), aynı zamanda eşleşen operatör silme işlemine de aşırı yükleme isteyeceksiniz / ihtiyacınız olacaktır. Değeri ne olursa olsun, diziler için bellek ayırmak için kullanılan ayrı bir operatör new [] de vardır - ancak bu karışıklığı tamamen görmezden gelmeniz neredeyse kesinlikle daha iyidir.
Yeni operatör, normalde ücretsiz mağazadan bir nesne oluşturmak için kullandığınız şeydir:
my_class *x = new my_class(0);
İkisi arasındaki fark, new operatörünün sadece ham belleği ayırmasıdır, başka hiçbir şey. Yeni operatör, bellek ayırmak için new operatörünü kullanarak başlar, ancak daha sonra doğru nesne türü için yapıcıyı çağırır, böylece sonuç, o bellekte oluşturulan gerçek bir canlı nesnedir. Bu nesne başka nesneler içeriyorsa (gömülü veya temel sınıflar olarak), bu yapıcılar da çağrılır.