2010-04-23 10 views
8

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; 
+5

@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

+7

@Suma: una pregunta pobre todavía puede conducir a buenas respuestas. –

+0

http://stackoverflow.com/questions/240212/what-is-the-difference-between-new-delete-and-malloc-free –

Respuesta

8

Tipo de valor devuelto por tanto new Type[x] y new Type es Type *. Su ejemplo double d = new int contiene dos errores:

  • necesita asignar el resultado en un puntero, así: double *d = new int
  • el puntero es necesario que haya un puntero al tipo o algo a lo que se puede convertir un puntero al tipo utilizando conversiones implícitas: int *d = new int o void *d = new int
30

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); 
+0

Por ejemplo int * p = new int, devuelve int *, ¿cómo la firma tiene void *? – kam

+1

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

+0

"int p = new int, devuelve int," No lo hace. Devuelvo int * (puntero a int). – Suma

Cuestiones relacionadas