• 締切済み

VC++.NETと標準C++とSTLの相性などの質問事項

自己研鑽のために、標準C++を学習し、STLについても学習しました。仕事で、Javaの経験が半年以上あります。正直な感想、勉強してみると、C++のほうが、気に入ってしまいました。 マイクロソフト関連の仕事をしたことがなく、VisualBasicすらありません。最近では、C#.NETなどがでてきています。 C#2.0やjavaのJ2SE5.0ででてくるGenericや、コレクションクラスにGenericを考慮したものが でてくる。など、C++のSTLの模倣のように感じました。 C#にはデリゲートがあるようですが。関数ポインタや関数オブジェクトそのまんまに見えます。 C#2.0が気になりますがまだ、ベータ版で未来の話なので、Visul C++.NETに興味を持ちました。せっかく勉強した標準C++やSTLの知識はそこでは役に立つのでしょうか。.NETにはそちのほうで独自のstring型やコレクション型があるのではないでしょうか? .NETだと、マネージコードなどガベージコレクトがあるようです。STLのコンテナはそれぞれ内部でデストラクタがヒープの内容を廃棄してくれますが、ガベージコレクトの環境で普通にSTLを使うとどういうことになるのでしょうか? 今度、Visual C++.NETの学習をはじめるかどうかの判断材料にしたいので、現時点までの知識が有効活用できるかどうかを知りたいです。宜しくお願いいたします。

みんなの回答

回答No.3

STL.NET が計画されているようです。 STLコンテナのManaged対応版といえばいいでしょうか。 アルゴリズム等は今ある<algorithm> etc がそのまま使えるはずです。

すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

マイクロソフトの環境に特化した部分と、それ以外ははっきり分けて設計することで、STLをはじめとした標準C++の知識や経験は存分に生かすことができます。 また、そうすることで、他の環境への移植性も高くなります。 逆に環境に強く依存した部分(GUIなど)は、どうせ移植性はないので、言語は何でもよいと思います。C++のマネージ拡張は、環境依存部と非依存部のブリッジにだけ使えば十分でしょう。(環境依存部もC++にするなら、そこではマネージ拡張のオンパレードでしょうが)

すると、全ての回答が全文表示されます。
  • terra5
  • ベストアンサー率34% (574/1662)
回答No.1

別に言語やSTLに限らず、鵜呑みにした知識でなければ役に立つでしょう。 直接的に役に立つかといえば、言語に依存する知識は似てはいても言語が変わると役に立たないとも言えるでしょう。 アルゴリズム、考え方のような物はどこでも同じです。STLも単に使い方でなくジェネリックプログラミングという考え方で身につければ役立つでしょう。 デリゲートは、単に関数ポインタやオブジェクトの変わりでしょう。他に同様なことの実現手段なかったと思います。 STLとマネージコードではメモリの管理は独立してるでしょうから、独立して使う分には特に問題無いだろうと思います。 変にまぜて使うとどうなるかわかりませんが。 また、C++.NETでもマネージコードを使わないという選択(今まで通りのネイティブコードを使う選択)も可能ですね。 というか、C++使うならマネージコードを避けたほうがいいかも知れません。 そういえば、VS6のC++でもMFC使うとC++のクラスとMFCのクラスでややこしいことになったりしますね。 String系のクラスがいくつも・・・。

gootarojp
質問者

補足

回答ありがとうございます。 >また、C++.NETでもマネージコードを使わないという選択(今まで通りのネイティブコードを使う選択)も可能ですね。 へぇ、そういう風な選択が可能なんですかぁ。 マネージコードってなんでしょう。 .NETのランタイム上で実行されることを想定した ガベージコレクトがなされるコードという認識でしょうか? マネージ・アンマネージの切り替えは、クラス単位で やるのでしょうか? マネージコードの対象として定義したクラスを 使っているクラスがアンマネージコードの時、 newした後のdeleteはしなくてよいのだろうか? .NETフレームワークのクラス郡はC#やVBなどでも、 使用しているのと、おなじシステムで用意された アセンブリ .dllファイルを使うのかな? だとしたら、.NETで用意されているクラス群は マネージコードに思われる。 自分が定義したアン・マネージドなクラスから .NETで用意されているクラス群をヒープに newして作ったらdeleteはいるのだろうか? newしているところのコードがマネージドか アン・マネージドか、 newされた側のクラスがマネージドか、アンマネージド か 4通りのパターンがありそうですが、それについて どのような挙動になるかの具体的な解が分かれば、 私が質問したSTLをVC++.NETで使用した時にどうなるかが わかりそうですが・・・・。 それは、実際に学習してみて詳細を知るのでしょうが、 今回は、VC++.NETを学習することが、他にいろいろやり たいことに優先させてでもすべきかを判断したいが ための質問で。 なので、例えば、上記の4通りの挙動をうまくプログラマ が選択して、コントロールしながら、問題なくやっていけるような仕組みに実際もんだいなっているかどうかを 知りたいです。 なお、詳細は本格的に学習してみてからになりますし、 掲示板で詳細に説明するのも限界があるので、 概要程度の説明で、上記のようなことが可能なのかを 知りたい。 >別に言語やSTLに限らず、鵜呑みにした知識でなければ役に立つでしょう。 >直接的に役に立つかといえば、言語に依存する知識は似て>はいても言語が変わると役に立たないとも言えるでしょう。 おっしゃることはよくわかりますが、 いくら将来の自己研鑽のためであっても、あまり実際上役に立ちそうにない、 PascalやSmallTalkを自らすすんでやる人もいないです。 考え方が将来役にたち、かつ、直接的にも役にたつ。 ものをできれば選択したいのではないでしょうか? STLと.NETをつなぐようなアダプターのようなクラスが あると、よいのですが。 Javaなどでもデコレーターパターンやアダプタパターン で使っている側にはあたかも、別のインターフェースで あるように見せるような考え方があると思います。 要求している側が.NETのコレクション型を欲している から、実態はSTLだけどそれを意識させないような インターフェースの調整するための仕組みが 既にマイクロソフトまたは、オープンソースなどで、 用意されているなどが、 あれば、直接的にSTLを役にたてるように もっていけるのでしょうが、それがあるかどうかとか そういう知識が私にはないので、それを収集するために たてた質問スレなんです。

すると、全ての回答が全文表示されます。

関連するQ&A