ひきこもりプログラマ

C++のこととか。

評価(項目29)

2006-07-30 | More Effective C++
場所
203ページ15行目
必要とする
実行する
原文
execute

場所
204ページ2行目
このような場合でも,参照回数計測では,複数のオブジェクトで共有できるようになってさえいれば,あなたに何も求めてくることはない。
このような場合でも,値が複数のオブジェクトに共有されないのであれば,参照回数計測は何の役にも立たない。
原文
Even when this is the case, reference counting still buys you nothing unless these values can be shared by multiple objects.

既存のクラスに参照回数計測を加える(項目29)

2006-07-30 | More Effective C++
場所
200ページ8行目
(コードはまたしても改良されている)
(量と重要性を鑑みて省略)
原文
(改訂版の発売を祈ってください)

場所
202ページ1行目
RCIPtrRCPtrの相違点は,コードの変更により前者だけになった)
(詳細は省略)
原文
(祈ってばかりではなんなので,アスキーに新訳版の発売をお願いしましょう)

場所
202ページ6行目
Widgetオブジェクトの裏に潜んでいるRCIPtrへの呼び出しを先に行なうからである
裏に潜んでいるRCIPtrを通じてWidgetオブジェクトの関数を呼び出すからである
原文
by forwarding the call through the underlying RCIPtr to a Widget object.

場所
202ページ8行目
  void doThis() { value->doThis(); }
  void doThis()
  {
    if (value.getRCObject().isShared()) { // Widgetが共有されていたら
      value = new Widget(*value);         // 書き込み時コピーを行なう
    }
    value->doThis();
  }
原文
(省略)

場所
202ページ10行目
それは,(中略),といったことである。
また,(中略),といったことにも注意してほしい。
原文
(省略)

すべてを合体させる(項目29)

2006-07-30 | More Effective C++
場所
195ページ1行目
[コードが変更・改良されている]
  • RCObjectprotectedメンバーはすべてpublic
  • Stringfriend宣言は不要
  • String::valueの型はRCPtr<StringValue>
原文
(省略)

場所
196ページ20行目
手作りのStringクラスで置き換えて
手作りのStringクラスから抜き出して
原文
out of our hand-written String class

場所
196ページ23行目
突然動き出しても驚かないで欲しい。[追加]
[なにせ動くように作ったのだから]
原文
It's supposed to work.

場所
197ページ1行目
RCPtrの代入演算子は変更されている)
(193ページの正誤表を参照)

原文
(省略)

参照回数の計測操作の自動化(項目29)

2006-07-30 | More Effective C++
場所
189ページ20行目
1つのメンバー関数が他を台なしにし,古き天罰,非const版のoperator[]に対してあまり驚きすぎることはないと思う。
1つのメンバー関数が他を台なしにしているのだが,その1つがわれらが宿敵,非const版のoperator[]であるというのはそう驚く話ではないだろう。
原文
One member function spoils the party, and I suspect you won't be too surprised to hear it's our old nemesis, the non-const version of operator[].

場所
190ページ1行目
いくつかのポインターのうちの1つが指す何かに
StringValueを指すポインターのどれかに
原文
to one of the pointers pointing to it.

場所
191ページ1行目
refCountフィールドのそれらが指すオブジェクト
それらが指すオブジェクトのrefCountフィールド
原文
the refCount field in the objects to which they point.

場所
191ページ10行目
関数がコンパイルできないときに
関数の振舞いが間違っている場合は
原文
the function doesn't behave correctly.

場所
191ページ11行目
問題なのは~新たな問題が生じる(192ページ1行目)
[削除]
原文
20th printing (March 2005) にはこの段落は存在しない。

場所
193ページ12行目
StringValueのコピーコンストラクタではなく,SpecialStringValueのを呼ぶためにinitに次の部分が必要である。(コード省略)
initに次の部分(コード省略)はStringValueのコピーコンストラクタではなく,SpecialStringValueを呼ぶ必要がある。
原文
we'd want this part of init,(コード省略)to call SpecialStringValue's copy constructor, not StringValue's.

場所
193ページ17行目
RCPtrのコンストラクターの邪魔にならないように
RCPtrのコンストラクターはこれで片付いた。
原文
With RCPtr's constructors out of the way,

場所
193ページ22行目
[最下段のコードは誤り。実装を以下のように置き換え]
  if (pointee != rhs.pointee) {      // 値が変わらないときは
                                     // 代入を省略
    T *oldPointee = pointee;         // 古いpointeeの値を保存
    pointee = rhs.pointee;           // 新しい値を代入
    init();                          // 可能であれば共有し,
                                     // 無理なら自分用にコピーする
    if (oldPointee) {
      oldPointee->removeReference(); // 現在の値への
                                     // 参照を削除
    }
  }
  return *this;
原文
(省略)

参照回数計測基底クラス(項目29)

2006-07-30 | More Effective C++
場所
187ページ6行目
メッセージを多く出力する仮想デストラクターがあるとすると,
デストラクターにも注目してほしい。デストラクターが仮想であることから,
原文
Note the tell-tale virtual destructor,

場所
187ページ8行目
デストラクターが純粋な仮想関数であればあるほど,
デストラクターがなぜ純粋仮想関数なのかも考えてほしい。このことからも,
原文
Note also how the destructor is a pure virtual function,

場所
187ページ13行目
それが判明すると,RCObjectの作成者のために物事を簡単にするように,彼ら自身でrefCountを1にすることから,
それがわかれば,RCObjectの作成者が自分でrefCountを1にすれば話は単純になる。
原文
As it turns out, it simplifies things for the creators of RCObjects to set refCount to 1 themselves,

場所
187ページ15行目
残されたコードの単純化についてさっと見ていこう。
最終的なコードをより単純にする機会はすぐに訪れる。
原文
We'll get a chance to see the resulting code simplification shortly.

場所
188ページ2行目
新しい値は常にそれらの作成者のみからしか,共有を不可能にしたり参照されたりできないからである。
新しい値は必ず共有されておらず,参照しているのは作成者だけだからである。
原文
new values are always unshared and referenced only by their creator.

場所
188ページ9行目
そのようなオブジェクトはオブジェクトが「指している」ようなお互いのオブジェクトに代入されることがない。
そのようなオブジェクトお互いに代入されることがない。代入できるのは,そのようなオブジェクトを指している別の種類のオブジェクト同士だ。
原文
such objects are not assigned to one another, objects pointing to them are.

場所
189ページ3行目
RCObjectは,従来通りに操作する。
それらのメンバー関数がやっていた仕事は,以後RCObjectが担当する。
原文
RCObject now handles what they used to do.

ポインター,参照,書込み時のコピー(項目29)

2006-07-30 | More Effective C++
場所
184ページ6行目
const operator[]
constoperator[]
原文
non-const operator[]

場所
184ページ10行目
もし参照回数計測文字列クラスへアクセスして
もし参照回数計測文字列が使えるのなら
原文
If you have access to a reference-counted string

場所
184ページ27行目
永久にそのままである。† [注釈追加]
† 標準C++ライブラリのstring型(項目35を参照)は二番目と三番目の方法を組み合わせて使っている。非const operator[]が返した参照が有効だと保証されているのは,文字列を変更する可能性のある関数が次に呼ばれるまでである。その後は,その参照(や参照先の文字)を使ったとしても結果は未定義である。このようなやり方をすると,文字列の共有可能フラグは,その文字列を変更する可能性のある関数が呼ばれるたびにtrueに戻すことができる。
原文
† The string type in the standard C++ library (see Item 35) uses a combination of solutions two and three. The reference returned from the non-const operator[] is guaranteed to be valid until the next function call that might modify the string. After that, use of the reference (or the character to which it referes) yields undefined results. This allows the string's shareability flag to be reset to true whenever a function is called that might modify the string.

書き込み時のコピー(項目29)

2006-07-30 | More Effective C++
場所
182ページ6行目
言うまでもなく,この関数は一般的なC++の伝統ではindexが正しいかどうかのチェックを行う。
この関数では,indexが正しいかどうかのチェックを行うにあたって,C++のすばらしい伝統にしたがっている。つまりなにもしない。
原文
The functoin performs sanity checking on index in the grand C++ tradition, which is to say not at all.

場所
182ページ16行目
C++のコンパイラに伝える方法はないので,
C++のコンパイラは教えてくれないので,
原文
there is no way for C++ compilers to tell us

参照回数計測を実装する(項目29)

2006-07-30 | More Effective C++
場所
178ページ9行目
Stringクラスの実装をつける
Stringクラスの実装に役立つ
原文
to help implement the String class

場所
178ページ13行目
これはコツのいるものであり,構造体をクラスの非公開な部分の中に入れ子にするのは,すべてにアクセスを拒否することを除いては(もちろんクラスのフレンドを除いては),クラスのすべてのメンバーへアクセスできるようにする便利な方法である。
このやり方は知っておいたほうがいい。構造体をクラスの非公開な部分の中に入れ子にすると,クラスのすべてのメンバーがその構造体にアクセスできるようにして,さらにそれら以外からのアクセスを拒否する(もちろんクラスのフレンドは例外である)ことが簡単にできる。
原文
This is a trick worth knowing: nesting a struct in the private part of a class is a convenient way to give access to the struct to all members of the class, but to deny access to everybody else (except, of course, friends of the class).

場所
179ページ2行目
これ以上加えるものは何もない。
まるで足りていない。
原文
that's nowhere near enough

場所
179ページ13行目
Stringオブジェクトが分かれて作成されているが,以下のような形のクライアントのコードでは,同じ初期値ではデータ構造を共有しない。
別々に作ったStringオブジェクトは,与えた初期値が同じでも,データ構造を共有しない。そのため,以下のような形のクライアントのコードでは,
原文
String objects constructed separately, but with the same initial value do not share a data structure, so client code of this form

場所
181ページ5行目
実際,異なるStringオブジェクトを提供することで,同じ値を持つことがある場合,上記の実装カウンターをデクリメントして
異なるStringオブジェクトが,実際に同じ値を持つようなことがあれば,上記の実装はカウンターをデクリメントして
原文
Provided that different String objects do in fact sometimes have the same values, the implementation above will do nothing more that decrement a counter

評価(項目28)

2006-07-23 | More Effective C++
場所
175ページ5行目
スマートポインターの中には,その使用がnullのテスト,ただのポインターへの変換,継承ベースの変換,constオブジェクトへのポインターのサポートなどとは無関係なように,そのスコープが厳しく限定されているものもある。
スマートポインターの利用法の中には,そのスコープが厳しく限定されているものもある。たとえばnullかどうかのテスト,ただのポインターへの変換,継承ベースの変換,constオブジェクトへのポインターのサポートなどがそうである。そのため,これらの間には関連性はない。
原文
some uses of smart pointers are sufficiently limited in scope that things like testing for nullness, conversion to dumb pointers, inheritance-based conversions, and support for pointers-to-consts are irrelevant.

スマートポインターとconst(項目28)

2006-07-23 | More Effective C++
場所
172ページ11行目
const型のポインターとconst型のポインターを同時に初期化することもできるし,非constオブジェクトへのポインターとconstオブジェクトへのポインターも同時に初期化することができる。
const型のポインターでconst型のポインターを初期化することもできるし,非constオブジェクトへのポインターでconstオブジェクトへのポインターを初期化することもできる。
原文
we can initialize const pointers with non-const pointers and we can initialize pointers to const objects with pointers to non-consts;

場所
173ページ11行目
あなたは言われたとおりにするしかない。
もうひとつの方法でやるしかない。
原文
you have to jump through one more hoop.


スマートポインターと継承ベースの型変換(項目28)

2006-07-23 | More Effective C++
場所
168ページ3行目
テンプレートの目的をうちまかす。
テンプレートの目的を意味のないものにしてしまう。
原文
defeats the purpose of templates.

場所
170ページ8行目
今,我々はただのポインター型間の変換に慣れており
いまや我々がいるのは,ただのポインター型間の変換という慣れ親しんだ世界であり,
原文
now we're on the familiar ground of conversions between dumb pointer types

場所
171ページ4行目
MusicProductだけから間接的に継承している
MusicProductからの継承は間接的なものだけである
原文
only indirectly from MusicProduct

場所
171ページ28行目
あいまいさをキャストすることは
キャストであいまいさを解消することは

原文
to cast away ambiguity

参照はがし演算子を実装する(項目28)

2006-07-23 | More Effective C++
場所
159ページ17行目
そうしてしまうコンパイラも多い。
コンパイラはそれを禁じていない。
原文
compilers will let you do it.

場所
159ページ20行目
誤った型のオブジェクトを返す[追加]。
[(これはスライス問題である――項目13を参照)]
原文
(This is the slicing problem — see Item 13.)

場所
160ページ9行目
あなたの誕生日のモジュロ256
あなたの誕生日を256で割った値
原文
your birth date modulo 256