2011-11-11 25 views
6

Ocasionalmente, he hecho un error tipográfico en un solo lugar del código de mi programa:¿Realmente puedo inicializar una matriz con corchetes redondos?

int a = 10; 
char* b = new char(a); 

error es obvia: He escrito() en lugar de []. Lo extraño es ... código compilado ok, se ejecutó en depuración ok. Pero el .exe compilado fuera del depurador se bloqueó un momento después de que se ejecutó la función con estas líneas.

¿Es realmente legítima la segunda línea de código? Y si lo es, ¿qué significa compilar?

Respuesta

10

Es un solo carácter con el valor numérico de a, en este caso 10. Los punteros no solo apuntan a las matrices, ¿sabes?

5

Estás asignación de una sola char y asignándole un valor de a. No está asignando una matriz en absoluto.

Es lo mismo que una llamada al constructor en una expresión new para cualquier otro tipo:

std::string* s = new std::string("foo"); 
int* i = new int(10); 
std::vector<std::string>* v = new std::vector<std::string>(5, "foo"); 
2

char t(a) crea un char locales inicializado con el valor de a.
new char (a) crea un char dinámicamente asignado inicializado al valor de a.

Cuestiones relacionadas