アカウント名:
パスワード:
deleteは記憶領域を返却するだけでなく、デストラクタも走ることをご存知ないですか?
ポインタは参照や反復子を実装する手段に過ぎないともいえますね。
抽象度が高い複雑な案件でも、パフォーマンスを上げたい部分はあります。私の経験では常に。ポインタを使ってまでチューニングすべきところは、それができる者がやればいい。残りは、別の人がやってもいい。その人は、ポインタを理解している必要は無い。ポインタを使わない方法を知っていればよい。メカニズムだけ理解してポインタをわかった気になってる人が一番危険です。
newで生成されたオブジェクトを指すポインタは、それを削除するための情報も内包している。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー
まぁ、驚いたのは (スコア:0)
指摘されても問題が何か理解出来ていない編集にはビックリだな
Re: (スコア:2, 興味深い)
自分でプログラミングすることなんか全く無いんでしょうね。
Re: (スコア:1, すばらしい洞察)
ポインタがいまいち理解できない人には朗報だ。
Re: (スコア:0, すばらしい洞察)
それで正しいと思います。
Cのポインタは、
- スカラ値への参照
- 配列への参照
- 動的オブジェクトの所有権管理
- 反復子
これら全然違う概念を一個で実現しようとする、そもそも無茶なキメラですよ。
私はC++使いなんですが、C++なら、状況によって参照やスマートポインタや反復子を使い分けるところです。
理解しようとするとかえって遠回りだと思います。
Re: (スコア:1, すばらしい洞察)
>動的オブジェクトの所有権管理
CもC++もそんなことはやってくれないよ?
所有権はプログラマが自分で管理するか管理するためのコードを書く。これ基本。でないとメモリリークし放題。
んとなー?抽象度の高い方から理解しようとするから理解できないんだよ。
ポインタを理解するにはメモリイメージを持つこと。これに尽きる。
Re: (スコア:0)
明示的にdeleteするのも所有権管理の範疇ではないでしょうか?
>ポインタを理解するにはメモリイメージを持つこと。これに尽きる。
その通りです。抽象度の高い課題には不要な理解で、生産性を下げます。
Re: (スコア:1)
感覚の問題かも知れんが、少なくとも俺はそうは思わない。
なぜならその例でいうdeleteで言えばnew/deleteとは無関係にポインタでアクセスできてしまうから。
「*(int*)0 = 0;」みたいないきなり「ぬるぽガッ」なコードだって書けちゃうし。
もしnew/deleteを所有権の管理とするなら所有する主体(主語)はオブジェクトではなくプロセスという解釈が必要になる。
でも、そうだとしてそれに意味があるのかどうかはかなり疑問。
>抽象度の高い課題には不要な理解で、生産性を下げます。
不要かどうかは別にして、それはそう。
だからそういう課題でパフォーマンス的にも細かい事言われないならC/C++はそもそも不向き。
Re: (スコア:0)
>「*(int*)0 = 0;」みたいないきなり「ぬるぽガッ」なコードだって書けちゃうし。
その通りです。所有権管理と参照は分離されるべきなのです。
だけどCのポインタは分離されてないよね、というのが前言の趣旨です。
>だからそういう課題でパフォーマンス的にも細かい事言われないならC/C++はそもそも不向き。
パフォーマンスが重要な案件でも、チューニングが必要なのは一部です。
Re: (スコア:0, フレームのもと)
分離されてないも何もさっきから言ってるように、そもそもポインタには所有権管理機能なんてないんだってば。
new/deleteやmalloc/freeはプロセスがメモリ空間を占有するものであって、ポインタがその確保した領域を占有するというものではないよ。
そもそもポインタは先頭を指してるだけであって領域のことなんか知ったこっちゃない。
例としては文字列でもいいけど、たとえば下みたいな構造体は「ポインタは先頭を指しているだけ」という性質を使ったもの。
この場合はサイズが不正なのでポインタを反復子としては使えな
Re: (スコア:-1, オフトピック)
deleteは記憶領域を返却するだけでなく、デストラクタも走ることをご存知ないですか?
つまり、newで生成されたオブジェクトを指すポインタは、それを削除するための情報も内包している。
それが所有権管理です。
>ポインタは参照だの反復子だのを具象化したものなんかじゃなくて、参照だの反復子だのはポインタの使い方の例でしかないわけよ。
ポインタは参照や反復子を実装する手段に過ぎないともいえますね。
>>パフォーマンスが重要な案件でも、チューニングが必要なのは一部です。
>だから?
抽象度が高い複雑な案件でも、パフォーマンスを上げたい部分はあります。私の経験では常に。
ポインタを使ってまでチューニングすべきところは、それができる者がやればいい。
残りは、別の人がやってもいい。その人は、ポインタを理解している必要は無い。
ポインタを使わない方法を知っていればよい。
メカニズムだけ理解してポインタをわかった気になってる人が一番危険です。
Re:まぁ、驚いたのは (スコア:0, フレームのもと)
ポインタを複製してもちゃんと管理してくれるとでも?
というかデストラクタを書くのは誰?
...あー、書く必要がない人なのね。 言えない。順序が逆。
既に上げてある通りポインタを反復子として使えない使い方もある。 ...あー、理解している必要がない人なのね。了解だよ。
# 最初からそう思ってたけどなー。
Re:まぁ、驚いたのは (スコア:1)
たしかにnewすると確保サイズが保存されてdeleteでちゃんと戻してくれる。でもそれはポインタの機能じゃなくてnewとdeleteの機能。ポインタに確保サイズとか入ってる糞な処理系の存在を否定はしないけど普通の処理系ではポインタに入ってるのはアドレスだけだよ。それと別のところにも書いたけど「スマートポインタ」はただのクラスであってポインタなんかじゃないよ。 なーんて言ってるし、やっぱり件の記事と大差ないな。
Re: (スコア:0)
「FILE*はfopen()やfclose()の機能であってファイルハンドル管理とは無関係」
というわけか。
ハハハハハハハハ
Re:まぁ、驚いたのは (スコア:2, すばらしい洞察)
Javaが生まれたということはよく分かった。
優秀なエンジニア二人の手を止めてしまう訳か。
# お前らがポインタを知っている事はよく分かった。
# でも人に誤解しないように説明するスキルはそれと別だからな、ということ。
Re: (スコア:0)
学習してもC/C++のポインタ程度の事柄を理解できない人は、ポインタ以外の技術も理解できないと思う。
(大半のPGは技術を理解してる必要も無いんだけどね)
Re: (スコア:0, フレームのもと)
そういう結論に至った経緯に興味があるよ。書いてみ?
Re: (スコア:0)