[C con Clase] Inicializacion de punteros. Son equivalentes esta expresiones?

Ferran Ferri ferranferri en gmail.com
Jue Ene 29 23:44:20 CET 2009


A mi me extrañaba esta forma. Lo lei mientras investigaba sobre smart
pointers aqui http://www.codeproject.com/KB/stl/boostsmartptr.aspx

En el primer code snipet tienes esto:


void Sample1_Plain()
{
  CSample * pSample(new CSample);

  if (!pSample->Query() )
  // just some function...

  {
    delete pSample;
    return;
  }

  pSample->Use();
  delete pSample;

}

Con lo que entiendo que debe ser un error.
Ferran



On Thu, Jan 29, 2009 at 8:49 PM, Steven Davidson <srd4121 en njit.edu> wrote:
> Hola Ferrán,
>
> Ferran Ferri wrote:
>>
>> Hola, mirando una documentacion me encuentro con esto:
>>
>> CSample * pSample(new CSample);
>>
>> Y me preguntaba si esa expresion es equivalente a:
>>
>> CSample * pSample = new CSample();
>>
>> En principio el operador new devuelve una referencia a CSample, pero
>> la forma de arriba no recuerdo haberla visto.
>>
>
> La primera forma es incorrecta, mientras que la segunda es la correcta,
> aunque en C++ no se agregan los paréntesis para invocar el constructor sin
> parámetros. Esto es,
>
> CSample * pSample = new CSample;
>
> La única manera de que la primera forma sea correcta es que uno no declare
> un puntero. Por ejemplo,
>
> CSample oSample( new CSample );
>
>
> Espero haber aclarado la duda.
>
> Steven
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>




Más información sobre la lista de distribución Cconclase