http://sourceforge.net/forum/forum.php?forum_id=583545 > * STL containers implementation now correctly handle allocators with state. This kind > of allocator has to overload swap method if any specific action has to be made when > swaping 2 instances.
int ((* a) [10]); int * (b[10]); a=b; とすると error: cannot convert `int*[10]' to `int (*)[10]' in assignment というコンパイルエラーになるんだけど、 int ((* a) [10]); と int * (b[10]); ってそれぞれどういう意味なんでしょう?
int *a[10]; int (*b)[10]; int x =123; // int int y[10] = {456}; // intの配列 a[0]=&x; // intへのポインタを格納 b=&y; // intの配列へのポインタを格納 printf("%d,%d", (*a[0]),(*b)[0]);
Aの定義方法の場合、 class A のメソッドの中で、 b = new B(); と定義する事で、右辺で確保されたメモリ空間のアドレスが、 bに代入され、その後、bはアドレス参照により、 class B のメンバ変数やら、メソッドなどを使用できる(アロー演算子を使って)、 と思うのですが、 @の定義方法の場合、 b.メンバ変数 = メンバ変数の値 b.メンバ関数 などで、new しなくても使えると 思います。
確かに、>>381 で@の宣言方法ですと、deleteしなくても、class A のインスタンスが、 スコープから外れると、class A のデストラクタ→ class B のデストラクタ という風になり、同じタイミングでメモリから解放されるということですね。 もし、class Aが保持する、class B のインスタンスを自分の好きなタイミング で開放したい時などは、Aの宣言の方がよいということですね。
>>391 class Aのヘッダでclass BのヘッダB.hをインクルードせずに>393のようにする。 実際にBにアクセスするA.cppでB.hをインクルードすれば、AはBにアクセスできる。 Aを使うCモジュールでは、B.hがインクルードされないので、 class Bの変更でCは再コンパイルされない。←これが>393の言うソース依存関係を断ち切ると言うこと。 その必要もない。←これが>392の言うバイナリコンパチビリティ
C++ではメソッドをメンバ関数という手段で実現するのだが、仮想関数を使う場合には、 あるオブジェクト(インスタンス)のメソッドがメンバ関数で実現されているかどうかは わからない。その意味で、>>411のURLには、 A virtual member function is sometimes called a method. と書かれている。
>この説明はよく分からんけど。 メンバ関数とは、あるクラスで定義された関数のことです。>>411のURLには >member function - a function declared in the scope of a class. A member function >that is not a static member function must be called for an object of its class. と説明されています。
http://www.open-std.org/jtc1/sc22/wg21/ News 2006-06-24: The C++ Standard Library Issues List (Revision 43) is available (.tar.gz) News 2006-06-24: C++ Standard Core Language Issues List (Revision 42) is available, also committee version