Pour une classe sans constructeur par défaut, operator new et placement new peuvent être utilisés pour déclarer un tableau de cette classe.opérateur new pour tableau de classe sans constructeur par défaut
Quand je lis le code plus efficace C++, j'ai trouvé le code comme ci-dessous (je l'ai modifié une partie) .....
Ma question est, pourquoi [] après que l'opérateur nouvelle est nécessaire?
Je l'ai testé sans ça, ça marche toujours. Quelqu'un peut-il expliquer cela?
class A {
public:
int i;
A(int i):i(i) {}
};
int main()
{
void *rawMemory = operator new[] (10 * sizeof(A)); // Why [] needed here?
A *p = static_cast<A*>(rawMemory);
for(int i = 0 ; i < 10 ; i++) {
new(&p[i])A(i);
}
for(int i = 0 ; i < 10 ; i++) {
cout<<p[i].i<<endl;
}
for(int i = 0 ; i < 10 ; i++) {
p[i].~A();
}
return 0;
}
Ceci est une sorte de duplicata de http://stackoverflow.com/questions/2498183/qui-pour-utiliser-opérateur-nouveau-un-operateur-nouveau-pour-allouer-unbloc-d'essai- moi, mais cette question n'a pas vraiment généré de réponses, juste un tas de variantes de "l'opérateur global nouveau est une fonctionnalité stupide qui ne devrait pas être en C++ en premier lieu, et quiconque l'appelle sent le pantalon". Celui-ci, en revanche, a quelques réponses, essentiellement "cela ne fait aucune différence, il suffit d'utiliser la bonne version de' operator delete' ": http: // stackoverflow.com/questions/2499895/whats-the-but-of-having-a-separate-operator-new –
Si vous vous souveniez de 'supprimer []' votre mémoire, vous auriez vu la seule différence qu'il fait. ':)' – sbi