2011-01-17 20 views
5

Sé que esto puede sonar como una pregunta estúpida, pero ¿por qué recibo un error que dice algo así como "¿Qué pasa con la palabra clave "nueva" en C++?

no se puede convertir objeto * al objeto

" cuando intento crear una instancia de una Objeto nuevo mediante el uso de la instrucción "

Object obj = new Object(); 

"?

¿Tengo que entender que la palabra clave "new" está reservada para los punteros? ¿O es otra cosa?

+10

No hay nada con 'nuevo'. Solo con tu comprensión de eso. – delnan

+8

Nada está mal. C++ solo tiene una semántica diferente y debes olvidar lo que supusiste que sabías. Comprender C++ requiere entender dónde se almacenan los objetos (montón o pila). Entonces entiendes por qué 'new' necesariamente devuelve un puntero. – Benoit

+4

C++ no es ni Java ni C#; hay diferencias, y usted ha identificado una. – andand

Respuesta

38
Object* obj = new Object(); 

new siempre devuelva el puntero al objeto.

si escribe solo Object obj significa que obj sostendrá el objeto. Si se declara así dentro de la función, la memoria se asignará en la pila y se borrará una vez que abandone esa función. new asigna memoria en el montón, por lo que el puntero puede devolverse desde la función. Tenga en cuenta que el puntero también puede apuntar a la variable local (pila) también.

+1

estarían encantados de escuchar la razón detrás del voto a favor – Andrey

+0

@Andrey Tienes suerte. [Hoy hay gente aburrida por aquí] (http://stackoverflow.com/questions/4716629/c-error-returning-a-char-array/4716656#4716656). Solo tienes un voto negativo. ;-) –

+1

@Andrey: No era yo, pero si lo fuera, me imagino que era la notación 'Object * ob ...' vs 'Object * ob ...' Admito que estaba pensando en eso ... ;) – FrustratedWithFormsDesigner

6

Exactamente. Nuevo crea un objeto en el montón, y le devuelve un puntero.

8

Desde new devuelve un puntero, usted debe utilizar

Object *obj = new Object(); 
+2

+1 para 'Object * obj' sobre' Object * obj'. – FrustratedWithFormsDesigner

+1

Prefiero Objeto * obj yo mismo. – ThomasMcLeod

+5

@Thomas: ¿Qué tal 'Object * obj'? ;-) – fredoverflow

6

el nuevo operador hace un puntero a un objeto

allí para Object *obj = new Object() debería funcionar.

pero sólo Object obj() construye el objeto muy bien, pero en el espacio pila

+0

'Object obj()' puede ser una variable global y no estará en la pila – Andrey

+6

'Object obj();' declara una función llamada 'obj' que no toma ningún parámetro y devuelve un' Objeto'. – fredoverflow

6

Object obj;

es todo lo que necesita. Crea el objeto obj.

+2

Probablemente eso es lo que necesita; pero no podemos darlo por hecho. – Benoit

1

Simplemente habría dejado un comentario, pero aparentemente necesito un representante para hacerlo.

En Java, las variables utilizadas para almacenar Objetos son punteros implícitos al Objeto. Por lo tanto, new funciona de la misma manera en C++ que en Java, pero no se tiene conocimiento de ello en Java. Voy a adivinar que esa es la razón de tu confusión.

Cuestiones relacionadas