Fernando Cacciola | 7 Jan 2008 19:39
Picon
Gravatar

GotW #88!


Hola Gente,

Pensando en comenzar el 2008 con la resurrección de este grupo (o sería 
renacimiento :)

Hace unos días Herb Sutter posteó el #88 de su genial Guru of the Week:

http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!378.entry

Se los recomiendo, sobre todo el último ejemplo en la sección de comentarios 
debajo de "Executive Summary".

Si quieren podemos discutirlo acá en español.

Salu2

--

-- 
Fernando Cacciola
SciSoft
http://fcacciola.50webs.com 

RFOG | 8 Jan 2008 17:04
Picon

Visual C++ 2008 Feature Pack


Mientras saco tiempo para leer la entrada que ha puesto el amigo Cacciola, 
os comunico que acaban de poner para descarga el Visual C++ 2008 Feature 
Pack en fase Beta, que es la prometida actualización nativa de MFC con 
soporte para los nuevos controles de Offce y del propio Visual Studio, así 
como una preview de la TR1

El anuncio:
http://blogs.msdn.com/vcblog/archive/2008/01/07/mfc-beta-now-available.aspx
La descarga:
http://www.microsoft.com/downloads/details.aspx?FamilyId=D466226B-8DAB-445F-A7B4-448B326C48E7&displaylang=en
La documentación:
http://www.microsoft.com/downloads/details.aspx?FamilyId=0D805D4E-2DC2-47C7-8818-A9F59DE4CD9B&displaylang=en
Microsoft Visual C++ MVP
========================
Mi blog sobre programación: http://geeks.ms/blogs/rfog
Mi blog sobre literatura: http://rfog.blogsome.com
Libros, ciencia ficción y  programación
========================================
El amor es ciego.
  -- Refrán.

RFOG | 8 Jan 2008 17:23
Picon

Re: GotW #88!


Yo creo que el ejemplo no falla y funciona porque la cadena  "abc" va en la 
sección de RO del ejecutable, y es una constante, por lo que se devuelve la 
referencia que apunta a dicha sección, ¿no?

El segundo debería funcionar igual, aunque al no ser const y apuntar al 
segmento RO, el compilador debería protestar, pero con "asignando un const a 
un no const".

El tercero también lo veo claro: como el objeto derivado tendrá su propio 
destructor, pues se llamará. Pero supongo que debería ser un destructor 
virtual, ¿no?

El último lo tengo que mirar con más detalle...

----- Original Message ----- 
From: "Fernando Cacciola" <fernando.cacciola@...>
To: <cppba@...>
Sent: Monday, January 07, 2008 7:39 PM
Subject: [cppba] GotW #88!

Hola Gente,

Pensando en comenzar el 2008 con la resurrección de este grupo (o sería
renacimiento :)

Hace unos días Herb Sutter posteó el #88 de su genial Guru of the Week:

http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!378.entry

(Continue reading)

Daniel Gutson | 8 Jan 2008 21:01
Picon

Re: GotW #88!


Hola, un comentario:

On 1/8/08, RFOG <rafael.ontivero@...> wrote:
>
> Yo creo que el ejemplo no falla y funciona porque la cadena  "abc" va en la
> sección de RO del ejecutable, y es una constante, por lo que se devuelve la
> referencia que apunta a dicha sección, ¿no?

en mi humilde opinion:
- mas alla de qué seccion sea RO (depende si es ELF, PE/COFF, o en
general si el formato soporte ese tipo de secciones), no depende de
dónde se almacena el literal. Un std::string NO DEPENDE del origen de
una cadena donde se construya, sino que se queda con una copia.

char* pepe = new char[10];
strcpy(pepe, "hola");
string s(pepe);
delete pepe;
cout << s;   //funca

  Daniel.

>
> El segundo debería funcionar igual, aunque al no ser const y apuntar al
> segmento RO, el compilador debería protestar, pero con "asignando un const a
> un no const".
>
> El tercero también lo veo claro: como el objeto derivado tendrá su propio
> destructor, pues se llamará. Pero supongo que debería ser un destructor
(Continue reading)

marcos | 9 Jan 2008 16:31
Picon

Re: GotW #88!


En mi humilde opinion:
- mas allá del tipo de binario que tengas y de que tengas memoria RO o
no, conceptualmente el literal "abc" es estatico y constante (por más
que el tipo sea char* y no const char* )  y se debe tratar como tal.
Y como hace notar daniel, un string siempre va a hacer una copia del
char* con que lo construimos, si no, la clase std::string perderia
totalmente el encapsulamiento y no podria dar absolutamente ninguna
garantia, y seria totalmente inutil.

Volviendo a los destructores, tengo al idea de que los objetos
temporales siempre son destruidos llamando al destructor directamente,
ya que el mecanismo virtual es innecesario ya que el compilador
siempre sabe el verdadero tipo del objeto. Esto es así?

Marcos

On 8 ene, 18:01, "Daniel Gutson" <danielgut...@...> wrote:
> Hola, un comentario:
>
> On 1/8/08, RFOG <rafael.ontiv...@...> wrote:
>
>
>
> > Yo creo que el ejemplo no falla y funciona porque la cadena  "abc" va en la
> > sección de RO del ejecutable, y es una constante, por lo que se devuelve la
> > referencia que apunta a dicha sección, ¿no?
>
> en mi humilde opinion:
> - mas alla de qué seccion sea RO (depende si es ELF, PE/COFF, o en
(Continue reading)

Daniel Gutson | 9 Jan 2008 16:35
Picon

Re: GotW #88!


sí, el periodo de ciclo de vida (inicio y fin) del objeto temporal es
determinístico, en tiempo de compilación. No importa que sea virtual
ni quién/es sea/n su/s objeto/s parent/s.

  Daniel.

On 1/9/08, marcos <marcosbracco@...> wrote:
>
>
> En mi humilde opinion:
> - mas allá del tipo de binario que tengas y de que tengas memoria RO o
> no, conceptualmente el literal "abc" es estatico y constante (por más
> que el tipo sea char* y no const char* )  y se debe tratar como tal.
> Y como hace notar daniel, un string siempre va a hacer una copia del
> char* con que lo construimos, si no, la clase std::string perderia
> totalmente el encapsulamiento y no podria dar absolutamente ninguna
> garantia, y seria totalmente inutil.
>
> Volviendo a los destructores, tengo al idea de que los objetos
> temporales siempre son destruidos llamando al destructor directamente,
> ya que el mecanismo virtual es innecesario ya que el compilador
> siempre sabe el verdadero tipo del objeto. Esto es así?
>
>
> Marcos
>
>
>
>
(Continue reading)

Daniel Gutson | 9 Jan 2008 16:38
Picon

Re: GotW #88!


Igual, y sólo por aclarar,
   a Marcos no le crean.

   ;-)

On 1/9/08, Daniel Gutson <danielgutson@...> wrote:
> sí, el periodo de ciclo de vida (inicio y fin) del objeto temporal es
> determinístico, en tiempo de compilación. No importa que sea virtual
> ni quién/es sea/n su/s objeto/s parent/s.
>
>  Daniel.
>
> On 1/9/08, marcos <marcosbracco@...> wrote:
> >
> >
> > En mi humilde opinion:
> > - mas allá del tipo de binario que tengas y de que tengas memoria RO o
> > no, conceptualmente el literal "abc" es estatico y constante (por más
> > que el tipo sea char* y no const char* )  y se debe tratar como tal.
> > Y como hace notar daniel, un string siempre va a hacer una copia del
> > char* con que lo construimos, si no, la clase std::string perderia
> > totalmente el encapsulamiento y no podria dar absolutamente ninguna
> > garantia, y seria totalmente inutil.
> >
> > Volviendo a los destructores, tengo al idea de que los objetos
> > temporales siempre son destruidos llamando al destructor directamente,
> > ya que el mecanismo virtual es innecesario ya que el compilador
> > siempre sabe el verdadero tipo del objeto. Esto es así?
> >
(Continue reading)

marcos | 9 Jan 2008 16:46
Picon

Re: GotW #88!


Y que pasa cuando hago lo siguiente? Compila? Es legal? Anda?

class Base {};
class Derived :public Base {};

const Base& func(const Derived& der) {
	return der;
}

int main()
{
	const Base& base = func(Derived());
	return 0;
}

On 9 ene, 13:38, "Daniel Gutson" <danielgut...@...> wrote:
> Igual, y sólo por aclarar,
>    a Marcos no le crean.
>
>    ;-)
>
> On 1/9/08, Daniel Gutson <danielgut...@...> wrote:
>
> > sí, el periodo de ciclo de vida (inicio y fin) del objeto temporal es
> > determinístico, en tiempo de compilación. No importa que sea virtual
> > ni quién/es sea/n su/s objeto/s parent/s.
>
> >  Daniel.
>
(Continue reading)

Daniel Gutson | 9 Jan 2008 17:08
Picon

Re: GotW #88!


Antes de usar el Comeau, opino que:

1) es well formed => compila.
2) anda, y hace nada.

Ahora le pregunto a comeau/tryitout :)

On 1/9/08, marcos <marcosbracco@...> wrote:
>
>
> Y que pasa cuando hago lo siguiente? Compila? Es legal? Anda?
>
> class Base {};
> class Derived :public Base {};
>
> const Base& func(const Derived& der) {
>        return der;
> }
>
>
> int main()
> {
>        const Base& base = func(Derived());
>        return 0;
> }
>
> On 9 ene, 13:38, "Daniel Gutson" <danielgut...@...> wrote:
> > Igual, y sólo por aclarar,
> >    a Marcos no le crean.
(Continue reading)

Daniel Gutson | 9 Jan 2008 17:13
Picon

Re: GotW #88!


Definitivamente, compila y anda.

La razón que lo suponía es porque:

a) Cuando se tiene la referencia constante a un objeto temporal,
prolonga su agonía hasta que la referencia se va de scope.
b) La referencia constante abarca todo el main(), por lo que no
debería pasar nada.

Ahora lo meto a Gustavo en esto tambien :)

  Daniel.

On 1/9/08, Daniel Gutson <danielgutson@...> wrote:
> Antes de usar el Comeau, opino que:
>
> 1) es well formed => compila.
> 2) anda, y hace nada.
>
> Ahora le pregunto a comeau/tryitout :)
>
> On 1/9/08, marcos <marcosbracco@...> wrote:
> >
> >
> > Y que pasa cuando hago lo siguiente? Compila? Es legal? Anda?
> >
> > class Base {};
> > class Derived :public Base {};
> >
(Continue reading)


Gmane