en C, malloc()
devuelve void*
. Pero en C++, ¿qué devuelve new
?¿cuál es el tipo de devolución de nuevo en C++?
double d = new int;
en C, malloc()
devuelve void*
. Pero en C++, ¿qué devuelve new
?¿cuál es el tipo de devolución de nuevo en C++?
double d = new int;
Tipo de valor devuelto por tanto new Type[x]
y new Type
es Type *
. Su ejemplo double d = new int
contiene dos errores:
double *d = new int
int *d = new int
o void *d = new int
Hay dos cosas que debe distinguir. Uno es nueva expresión. Es la expresión new T
y su resultado es T*
. La misma hace dos cosas: En primer lugar, llama al nuevo operador a asignar memoria, entonces se invoca el constructor para T. (Si el constructor se interrumpe con una excepción, sino que también llamará al operador eliminar ).
Lo anterior nuevo operador, sin embargo, viene en varios sabores. El más destacado es este:
void* operator new(std::size_t);
Podría llamarlo explícitamente, pero eso rara vez se hace.
Hay otras formas del nuevo operador , por ejemplo para las matrices
void* operator new[](std::size_t);
o el llamado colocación nueva (que en realidad es un falso nuevo, ya que no asigna):
void* operator new(void*, std::size_t);
Por ejemplo int * p = new int, devuelve int *, ¿cómo la firma tiene void *? – kam
Gran respuesta a una pregunta tonta. El póster no parece tener idea de cómo "nuevo" encaja en el idioma. La respuesta explica esto muy bien. – Suma
"int p = new int, devuelve int," No lo hace. Devuelvo int * (puntero a int). – Suma
@Suma: Mientras Estoy básicamente de acuerdo con sus sentimientos hacia las preguntas de Kam, creo que éste es genuino y la importante distinción entre un expression_ _new y la operadora de _new es difícil de encontrar cuando se busca "operador nuevo". – sbi
@Suma: una pregunta pobre todavía puede conducir a buenas respuestas. –
http://stackoverflow.com/questions/240212/what-is-the-difference-between-new-delete-and-malloc-free –