ひきこもりプログラマ

C++のこととか。

項目10: コンストラクターでも資源の漏れを防ぐ

2006-03-25 | More Effective C++
場所
49ページ7行目
項目3参照
項目4参照

場所
50ページ1行目
対応する実引数がnullでないとき
対応する実引数が空文字列でないとき
原文
if the corresponding arguments are non-empty strings

場所
50ページ11行目
AudioClip自体が
AudioClipのコンストラクタ自体が
原文
because the AudioClip constructor itself

場所
52ページ6行目
完全に作られたオブジェクトの場合には,これらのデータメンバーは,それらを含むBookEntryオブジェクトがあるとき,自動的に解体されるのであり,あなたが手出しをする必要はない。[注釈追加]
完全に作られたオブジェクトであるので,これらのデータメンバーは自動的に解体される。たとえBookEntryのコンストラクタで例外が発生しても,である†。† [ただし,繰り返すが,例外が捕捉された場合の話である。]
原文
As fully constructed objects, these data members will be automatically destroyed even if an exception arises in the BookEntry constructor†.† Provided, again, that the exception is caught.

場所
52ページ14行目
共通の補助関数に

共通のprivateな補助関数に
原文
into a private helper function

場所
55ページ6行目
この解決法には次のような利点がある。
この解決法は次の事実を利用している。
原文
this solution takes advantage of the facts that

場所
56ページ3行目
それらを含むBookEntryオブジェクトがあっても
それらを含むBookEntryオブジェクトが解体される際に
原文
when the BookEntry object containing them is

項目9: 資源の漏れを防ぐためにデストラクターを使う

2006-03-18 | More Effective C++
場所
45ページ1行目
子犬オブジェクトか子猫オブジェクト
Puppy(子犬)オブジェクトかKitten(子猫)オブジェクト
原文
a Puppy object or a Kitten object

場所
46ページ7行目
[追加] それは,関数の抜出し方にかかわらず…
[常に実行しなければならないコードを,processAdoptions内部の局所オブジェクトのデストラクタ内部にどうにかして移動できれば,重複して書く必要はなくなる。] なぜかというと,関数の抜出し方にかかわらず…
原文
We don't have to if we can somehow move the cleanup code that must always be executed into the destructor for an object local to processAdoptions. That's because...

場所
46ページ8行目
解体しなければならない
解体される
原文
are always destroyed

場所
47ページ8行目
自分で書くしかない。[追加]
[しかしそのような場合,配列のかわりにvectorを使うというのがより優れた設計方針であろう。]
原文
In such cases, however, it's often a better design decision to use a vector instead of an array, anyway.

場所
47ページ19行目
Cスタイルのインタフェースをもつ多くのウィンドウシステムでは,ウィンドウ資源を確保したり開放したりするために,createWinodwdestroyWindowのような関数を使うであろう。
多くのウインドウシステムにはCに似たインターフェイスが備わっている。そうしたインターフェイスでは,createWindowdestroyWindowといった関数を使ってウィンドウ資源を確保,開放する。
原文
Many window systems have C-like interfaces that use functions like createWindow and destroyWindow to acquire and release window resources.

場所
48ページ10行目
createWindowが作ったウィンドウは常に解体される。†[注釈追加]
†[まあ,ほとんど常に,ということだが。もしも例外が捕捉されなければ,プログラムは強制終了する。その場合,局所オブジェクト(例に出てくるwのようなもの)のデストラクタが呼ばれる保証はない。デストラクタを呼ぶコンパイラもあればそうでないものもある。どちらの動作も正当なものである。]
原文
† Well, almost always. If the exception is not caught, the program will terminate. In that case, there is no guarantee that local objects (such as w in the example) will have their destructors called. Some compilers call them, some do not. Both behaviors are valid.

例外

2006-03-11 | More Effective C++
場所
43ページ8行目
例外を使ったプログラムを書き,それをほぼ正確に使いこなすことができる人はC++のコミュニティでも少ない。
例外を利用したプログラムの書き方について,C++コミュニティが知らないことはたくさんある。たとえば,といってもこれがほとんどなのだが,どうすれば正しく例外を利用できるかということだ。
原文
There is much the C++ community does not know about writing programs using exceptions, including, for the most part, how to do it correctly.

場所
43ページ9行目
技術の中核に関して,ルーチンとして適用したとき,例外の発生時に予測どおりに信頼を持って振る舞うようなソフトウェアにどのようにつなげていくかの合意はできていない。
例外が投げられたときのソフトウェアの振る舞いを予測可能かつ信頼できるものにするには,どんな諸技術を日常的に利用すればいいのだろうか。それに関するとりきめはいまもって存在しない。
原文
There is as yet no agreement on a body of techniques that, when applied routinely, leads to software that behaves predictably and reliably when exceptions are thrown.

場所
43ページ13行目
例外があってもうまく動くプログラムはきちんとしていると。なぜなら,たまたま例外に出会ったのではなく最初から設計に含まれているからである。
例外があってもプログラムがうまく動くのであれば,それはそのように設計されたからであり,たまたまうまくいったということはありえない。
原文
programs that behave well in the presence of exceptions do so because they were designed to, not because they happen to.

場所
43ページ28行目
Cプログラマーではsetjmplongjmpのみを使って対処した振る舞いである。

Cプログラマがこのような振る舞いをさせようと思ったら,方法はsetjmplongjmpしかない。
原文
This is behavior that C programmers can approach only by using setjmp and longjmp.

場所
44ページ7行目
例外を含むプログラムに関して十分学んできたので,
例外を含むプログラムに関して学ぶべきことはひじょうに多いので,
原文
have much to learn about programming with exceptoins,

項目8: newとdeleteの別の意味を理解する

2006-03-11 | More Effective C++
場所
35ページ25行目
文字列オブジェクト
stringオブジェクト
原文
string object

場所
37ページ7行目
オブジェクトは,最初に値を与えるときのみ初期化できるからである。
オブジェクトを初期化する――つまり初期値を与える――ことができるのは一度きりである。
原文
an object can only be initialized — given iytsfirst value — once.

場所
37ページ9行目
placement new
配置new(placement new
原文
placement new

場所
37ページ20行目
これは単にnew演算子を用いて,それに付加的な実引数 (buffer) が指定され,それによりnew演算子がoperator newになる暗黙の呼び出しを含んでいる。
new演算子に渡された引数 (buffer)が,new演算子が暗黙的に呼び出すoperator newの引数として使われるというだけのことである。
原文
it's just a use of the new operator in which an additional argument (buffer) is being specified for the implicit call that the new operator makes to operator new.

場所
38ページ7行目
使われないことで文句が出ないようにコンパイラが行っているためである。
使われていないとコンパイラが文句をいうのを防ぐためである。
原文
to keep compilers from complaining about its not being used;

場所
38ページ9行目
#inlucde <new.h>を行うだけでよい。
#include <new>とするだけでいい(コンパイラが新方式のヘッダをサポートしていなければ<new.h>とする)。
原文
all you have to do is #include <new> (or, if your compilers don't support the new-style header names, <new.h>).

場所
40ページ8行目
array new
配列new(array new
原文
array new

場所
40ページ19行目
大域的operator newは1つだけなので
「通常の」シグニチャをもつ(すなわちsize_t引数を1つだけとる)大域的operator newは1つだけなので
原文
there is only one global operator new with the “normal” signiture (i.e., taking the single size_t parameter)

項目7: &&,||,,をオーバーロードしない

2006-03-04 | More Effective C++
場所
33ページ7行目
鳴り物入りで導入された
叩き込まれてきた
原文
has been drummed into

場所
34ページ7行目
息をはずませていっているのなら
息をのんだのなら
原文
when you gasped

場所
34ページ9行目
自然のままでお目にかかるとすれば
お目にかかることがもっとも多いのは
原文
most likely to run across

場所
34ページ10行目
Cプログラミング言語の本の第2版
[注釈4は本文に書けばよい。日本語版の書籍名は正確には『プログラミング言語C ANSI規格準拠』(共立出版,ISBN:4320026926)である]
原文
The C Programming Language

場所
35ページ5行目
一体全体何をオーバーロードしたいのだろうか?
オーバーロードできないのはどれだろうか?
原文
what can't you overload?