> ずっと思っているのですが、エラーを出して頂けないものかと。
解放忘れをエラーとして吐いてくれるコンパイラがあれば、開発はかなり楽になりますね。
・・・が、しかし難しいと思います。
ユーザーの操作などによって開放のタイミングは変わりうるので、
アプリを実行した時でないと、分かりにくいと思います。
> 何が出来るかと思って HeapSize とか採ってみたりしました。
> で、採れたりしたんで。
採れるんですか。これは吃驚。
> 色々調べても開放したりしているのは見つからなかったのですが、かといって明確に「開放しないで」と記されてもいなかったので如何なのかと。
例えば、ABのヘルプを読むと「文字列が格納されているバッファ」と
書いてあるので、
GetCommandLine()でバッファを確保したわけではなく
(OSによって?)
もともと確保されているバッファへのポインタを
得てきただけですから、開放を考える必要はない、と私は判断してます。
> 一般的な、文字列の開放・操作に関する結論として、
>
> 「自前で確保したバッファのみをキチンと開放すればよい。」
>
> 「自前で確保したバッファ以外に対しては直接操作すべきでない。」
>
> という認識で宜しいのでしょうか。
その認識で良いと思います。
もっと正確に言うなら、
「『開放してください』と明記されているバッファのみ開放すれば良い」
「自前で確保したバッファ以外は、OSなどによってどのタイミングで
どんな操作がされているか分からないので、ブラックボックスとして扱い、
書き換えなどは行わないほうが良い。」
だと思います。
もっとも、コマンドライン引数以外だと、思いつきませんが^^;)
[quote]> ずっと思っているのですが、エラーを出して頂けないものかと。[/quote]解放忘れをエラーとして吐いてくれるコンパイラがあれば、開発はかなり楽になりますね。
・・・が、しかし難しいと思います。
ユーザーの操作などによって開放のタイミングは変わりうるので、
アプリを実行した時でないと、分かりにくいと思います。
[hide=蛇足。]かなり慣れている人でも、バッファの解放忘れは時としてやってしまうと聞きます。
ミスは人間としてしょうがないので、であればコードの側で自動確保と開放を
してしまえば、コーディングの際に解放を気にする必要は無く、
結果として忘れることもなくなる、という話になります。
その結果として生まれてきたのが、
文字列に関していえばC++のStringクラスであり、
もっと広くはスマートポインタになります。
ABのString型も、この仲間ですね(自動で解放される)。
・・・仕様があいまいなのが欠点(APIとの相性悪し)。
ちなみに、[url=http://www.activebasic.com/forum/viewtopic.php?t=1001]String型を廃してStringクラスとしてキッチリ再定義しよう[/url]
という動きがあるみたいです。[/hide]
[quote]> 何が出来るかと思って HeapSize とか採ってみたりしました。
> で、採れたりしたんで。[/quote]採れるんですか。これは吃驚。
[quote]> 色々調べても開放したりしているのは見つからなかったのですが、かといって明確に「開放しないで」と記されてもいなかったので如何なのかと。[/quote]例えば、ABのヘルプを読むと「文字列が格納されているバッファ」と
書いてあるので、[b]GetCommandLine()でバッファを確保したわけではなく[/b]
(OSによって?)[b]もともと確保されているバッファ[/b]へのポインタを
得てきただけですから、開放を考える必要はない、と私は判断してます。
[quote]> 一般的な、文字列の開放・操作に関する結論として、
>
> 「自前で確保したバッファのみをキチンと開放すればよい。」
>
> 「自前で確保したバッファ以外に対しては直接操作すべきでない。」
>
> という認識で宜しいのでしょうか。[/quote]その認識で良いと思います。
もっと正確に言うなら、
「『開放してください』と明記されているバッファのみ開放すれば良い」
「自前で確保したバッファ以外は、OSなどによってどのタイミングで
どんな操作がされているか分からないので、ブラックボックスとして扱い、
書き換えなどは行わないほうが良い。」
だと思います。
[color=#777777]もっとも、コマンドライン引数以外だと、思いつきませんが^^;)[/color]