- 50 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 22:09:23 ]
- 草取りを除いて翻訳終わりました。>41のアドレスに。
>>40 DからはC++のクラス全体が見えているわけではなく、 ある型のインスタンスポインタと、その型の仮想関数テーブルだけが見えているようです。 したがって、 ・フィールド(メンバ変数) ・staticメンバ ・コンストラクタ、デストラクタ、変換(cast?)オペレータ、演算子オーバーロード、割り当て関数(newとdelete) これらはすべてアクセスできません。 多重継承したC++クラスのインスタンスも怪しいです。 >>48 リークします。 >40のC++側コードに追加するなら、 int removeD(D* obj){ try{ delete obj; } catch(なにがしか) { 例外を受け取ったらエラーコードをreturnする } return 正常; } とするべきでしょう。 多用するなら、D側でラッパとなるクラスを用意して、 そのデストラクタからC++のデストラクタとなる関数を呼び出すようにするしかないかと。 二重deleteの防止などはかなり面倒ですんで、C++側でshared_ptrかGCを用意する対策が必要でしょう。
|

|