- - PR -
Managed C++ != C++
«前のページへ
1|2|3|4
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2002-07-31 08:29
はじめまして
Managed C++を使っていただき、ありがとうごさいます。 あまりこのスレッドと関係ないかもしれませんが、めったにManaged C++ についての質問を見ないのでついでに投稿させていただきます。 以下のリンクにManaged C++とTemplateを使ったサンプルがありますので、 よかったら読まれてください。 http://msdn.microsoft.com/msdnmag/issues/02/02/ManagedC/ManagedC.asp 下の二つのリンクはもう少しManagedC++の一般的なことについて 書いてあります。 http://msdn.microsoft.com/msdnmag/issues/02/02/ModernC/ModernC.asp http://msdn.microsoft.com/msdnmag/issues/01/07/vsnet/vsnet.asp なぜManaged C++が作られたのか?"なぜ"、"どこに"Managed C++使うのか? などについて書きたいのですが、今回はあまり時間がないので、 またの機会にさせていただきます。 最後に、これからもフィードバックをよろしくお願いいたします。 DaigoH [MSFT] _________________ This posting is provided "AS IS" with no warranties, and confers no rights. この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。 | ||||||||||||||||||||
|
投稿日時: 2002-07-31 11:12
すみません、遅くなりました。
この件ですが、USのMSの方にバグであることを確認してもらいました。OleDbConnectionのバグですので、ひとまずFinalizeとマルチスレッドの問題とは関係ない、ということで。
確かに。少し調べてみたところ、次のことがわかりました。 1) System::Objectから直接派生し、しかもFinalizeを実装していないクラスに対しては、Finalizeへの呼び出しがコンパイルも通り、実行も可能。System::Stringはこれに該当します。 2) 自分ではFinalizeを実装していないが、自分の基底クラス(System::Object以外)が実装しているクラスに対しては、Finalizeへの呼び出しがコンパイルは通るものの、実行時例外(MethodAccessException)になる。System::Drawing::Bitmapなどがこれに該当します。 3) 自分でFinalizeを実装しているクラスに対しては、Finalizeへの呼び出しがコンパイルエラー(C2248)になります。 こちらも投げてみましたが、まだ確かな回答は得られていません。
納得しました。 つまり、他のオブジェクトの寿命を自分の寿命と一致させようとしているにもかかわらず、そのオブジェクトの管理を他者(staticなコレクション)にやらせているためにこういうことが起きるのですね。staticは一見自分の一部のような気がしてしまいますが、その実yaさんのご指摘どおり、ロード後はいつまでも存在する他のオブジェクトですから。
これまた納得しました。 ただしこの場合、Logが自分のインスタンスフィールドだった場合は、問題になります。自分のインスタンスフィールドは自分より先にFinalizeされる可能性があり、Finalizeの中で触ろうとすると例外になる可能性があるから(だそう)です。一方、何らかのstaticフィールドである場合も問題です。Log.Addの実装が、回りまわってFinalize済みオブジェクトに触る可能性があるから(だそう)です。もちろんLogが自分で実装したものであればそのような心配はせずに済みそうですが。「だそうです」というのは、私の観察結果ではなく、これにそう書いてあったからです。 ちなみに、
という話なんですが、こういう研究をしている人たちもいます。今日の無理は明日の常識かもしれないということで、一応。 | ||||||||||||||||||||
|
投稿日時: 2002-07-31 13:13
こんにちは。
●OleDbConnectionの件 ●Finalizeの件 わざわざありがとうございます。・・・ しかし、なんといいますか、「完璧なもの」なんてないのですが、「仕様」と「バグ」のあやふやなところが、こう、使う意欲をなくすというか・・・ とにかく、「VS.NETを使って」ということで3ヶ月ほど進んできたProj.ですが、「プラットフォームから見直す」ということになりました。 内作ツールなのでこんなことできるんですけど・・・だつりょく・・・ |
«前のページへ
1|2|3|4