13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 537 — #575<br />

✐<br />

los casos <strong>en</strong> que ellos puedan necesitar usar únicam<strong>en</strong>te punteros. (eso puede<br />

acelerar las compilaciones.)<br />

45. Cuando elija el tipo de retorno de una operador sobrecargado, considere que<br />

ocurrirá if se <strong>en</strong>cad<strong>en</strong>an expresiones. Retorne una copia o refer<strong>en</strong>cia al valor<br />

(return *this) de modo que se pueda usar e una expresión <strong>en</strong>cad<strong>en</strong>ada (A<br />

= B = C). Cuando defina el operator=, recuerde que x=x.<br />

46. Cuando escriba una función, pase los argum<strong>en</strong>tos por refer<strong>en</strong>cia constante como<br />

primera elección. Siempre que no necesite modificar el objeto que está pasando,<br />

esta es la mejor práctica porque es tan simple como si lo parasa por valor<br />

pero sin pagar el alto precio de construir y destruir un objeto local, que es lo<br />

que ocurre cuando se pasa por valor. Normalm<strong>en</strong>te no se querrá preocupar demasiado<br />

de las cuestiones de efici<strong>en</strong>cia cuando esté diseñando y contruy<strong>en</strong>do<br />

su sistema, pero este hábito es una ganancia segura.<br />

47. T<strong>en</strong>ga cuidado con los temporarios. Cuando esté optimizando, busque creaciones<br />

de temporarios, especialm<strong>en</strong>te con sobrecarga de operadores. Si sus constructores<br />

y destructores son complicados, el coste de la creació y destrucción<br />

de temporarios puede ser muy alto. Cuando devuelva un valor <strong>en</strong> una función,<br />

int<strong>en</strong>te siempre contruir el objeto «<strong>en</strong> el sitio» (in place) con una llamada<br />

al constructor <strong>en</strong> la s<strong>en</strong>t<strong>en</strong>cia de retorno:<br />

return MyType(i, j);<br />

mejor que<br />

MyType x(i, j);<br />

return x;<br />

La primera s<strong>en</strong>t<strong>en</strong>cia return (también llamada optimización de valor de retorno)<br />

evita una llamada al constructor de copia y al destructor.<br />

48. Cuando escriba constructores, considere las excepciones. En el mejor caso, el<br />

constructor no hará nada que eleve un excepción. En ese esc<strong>en</strong>ario, la clasé<br />

será compuesta y heredará solo de clases robustas, de modo que ellas se limpiarán<br />

automáticam<strong>en</strong>te si se eleva una excepción. Si requiere punteros, usted<br />

es responsable de capturar sus propias excepciones y de liberar los recursos antes<br />

de elevar una excepción <strong>en</strong> su constructor. Si un contructor ti<strong>en</strong>e que fallar,<br />

la acción apropiada es elevar una excepción.<br />

49. En los constructores, haga lo mínimo necesario. No solo producirá una sobrecarga<br />

m<strong>en</strong>or al crear objetos (muchas de las cuales pued<strong>en</strong> quedar fuera del<br />

control del programador), además la probabilidad de que elev<strong>en</strong> excepciones<br />

o caus<strong>en</strong> problemas será m<strong>en</strong>or.<br />

50. La responsabilidad del destructor es la de liberar los recursos solicitados durante<br />

la vida del objeto, no sólo durante la construcción.<br />

51. Utilice jerarquías de excepciones, preferiblem<strong>en</strong>te derivadas de la jerarquía de<br />

excepción estándar de <strong>C++</strong> y anidelas como clases públicas con la clase que<br />

eleva la excepción. La persona que captue las excepciónes puede capturar los<br />

tipos específicos de excepciones, seguida del tipo base. Si añade una nueva excepción<br />

derivada, el código de cli<strong>en</strong>te anterior seguirá capturando la excepción<br />

por medio del tipo base.<br />

537<br />

✐<br />

✐<br />

✐<br />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!