mallocの後にfree不要と言うバカいるの?Part2

■ このスレッドは過去ログ倉庫に格納されています
2013/01/30(水) 21:38:37.44
fjの時代から10年以上に渡るmalloc/free問題について語ってください(^q^)

前スレ
main以外★mallocの後にfree不要と言うバカいるの?
http://toro.2ch.net/test/read.cgi/tech/1352812333/
2014/12/04(木) 21:25:34.66ID:otxDKoZc
いろんな手法を駆使してだましだまし漏れがないようにしているレベル、って言うんじゃないのか、それw
2014/12/04(木) 22:34:16.24ID:wOy+480c
それって言語レベルで完全なGC無いと満足できませんっていってないか?
2014/12/04(木) 23:15:24.98ID:Q4EOsLJ8
malloc/freeでバグばっかり出してる奴が「freeしない」という解決策を正当化しようとしているだけの話。
2014/12/05(金) 00:48:52.11ID:3wjXi0Au
この感じだとバグ出す以前の問題で、deleteの使い方知らずに恥かいたJava厨なんじゃね?
2014/12/05(金) 01:39:25.94ID:eQEw8fvn
なぜメモリを動的に確保する必要があるのか?という基本に立ち返って考えれば
不要論は論外であることに気づくだろう
注:このスレタイからわかるように近年のGCは範疇に入っていない
2014/12/05(金) 08:03:02.81ID:F2ZjRsjm
もともと GC の話じゃないし
2014/12/05(金) 08:19:12.35ID:2qqkLjHh
>>561
ラッパ一つを「いろんな」「駆使して」とかいうお子様レベルなの?
あと GC はまだまだだよ、Java の業務アプリを60日間起動しているとメモリ占有量が増えてきてきびきび動かなくなるとか勘弁してほしい、スマフォもイマイチだなあ
2014/12/05(金) 11:53:33.63ID:IjAdRY0C
ほら出た、「俺様のやってる業務には」というすごく狭い世界が、世界の全てだ、みたいな人w
2014/12/05(金) 20:02:26.00ID:2qqkLjHh
>>559
確かにFORTRAN, COBOL と並ぶ由緒正しき Lisp 様由来の GC に喧嘩を売るのはちょっと怖いが、実はすでに試みてみた‥
http://peace.2ch.net/test/read.cgi/tech/1408017352/201
2014/12/06(土) 00:13:17.80ID:tAcOC+EO
Qzって、Lisp Schemeでケンカ吹っかけてガン無視されてるよな。
2014/12/06(土) 00:28:28.87ID:uyZCaoW8
「胸を借りるつもりで」
2014/12/06(土) 01:08:13.40ID:uyZCaoW8
>>547
演算子 new をオーバーロードするとき、中身は malloc() で書かざるを得ない気がする‥
2014/12/06(土) 03:30:36.01ID:Iv1q4dyj
>>572
VirtualAllocとかOS依存のメソッド使ったり、グローバルな配列を細切れに使ったりも出来るんじゃない?
標準のAPIで書くならmallocしかないけど…
コンパイラ環境側が提供するnewを標準Cの範囲のみで書かなきゃダメな規則とか有るんだろうか?
だけどstd::threadとか標準Cにはどうやっても落とし込めないよなぁ…
2014/12/06(土) 09:58:48.26ID:Khx/zTiJ
いやいや、freeが邪魔になるのは数少ない例外って
世界でものすごく広く使われているプログラムcpがfreeが邪魔だから
最後のfreeしなくなったでしょ

Google word2vecだって最後のfreeは省略している。

上で書いてあるJaneの例はfreeすべき例、
オブジェクトの寿命が終わったのだから。


free絶対主義者の考え方の何が、気に食わないかって
オブジェクトの寿命を意識してプログラムを組んでいないんじゃ
ないかってこと。

リークチェッカに引っかからなければプログラムの実行中
不必要なオブジェクトの領域が確保されていても気にしなさそう。
2014/12/06(土) 11:47:15.03ID:dmb0kXdE
なぜメモリを静的にではなく動的に確保するのか?の本来の目的を考えれば
自ずと答えは出る
2014/12/06(土) 12:31:58.16ID:ui+tbMEF
オブジェクトの寿命を意識するってのは、プログラム開始してから終了するまでの
どの期間存在するかを常に意識しろということなのかね。
プログラムの構造化によって生存区間を限定し、不要になった時点で破棄することで
大域的な知識によらずに安全に使用リソースの最小化を図るという考え方が理解できない
原始時代の人なんだろうか。
そういう人は少なくとも関数内でmalloc/freeを使うべきじゃないな。
2014/12/06(土) 12:50:41.02ID:JydoFUaV
大域的な知識を基に最適化するのはむしろ今のトレンドだけど

オブジェクトの生存期間を意識し、場合によってはfreeしないことで
プログラムの性能を向上させる話でしょ?
cpやword2vecの例は
2014/12/06(土) 14:49:24.53ID:ui+tbMEF
自動化ないしは意識せずにできるようにするのはな。
プログラマ自身がしこしこやるのがいったいどこのトレンドだよw
2014/12/06(土) 15:42:19.80ID:dmb0kXdE
そういうやつは、スレチだがgcつかっとけよもう
2014/12/06(土) 18:25:26.31ID:dOSwxHPK
cpやword2vecを書くようなプログラマと
その辺で業務システム書いてるドカタを
同じ土俵で論じるのが間違い
581574
垢版 |
2014/12/06(土) 19:13:16.22ID:Khx/zTiJ
>>576

>> 不要になった時点で破棄

まさしくそれ、
不要になったと判明した時点で速やかに破棄というのが大前提。

free絶対派はその意識が乏しいんじゃないかと。
なんとなくmallocとfreeは対でなければいけないから漫然と
freeしているだけなんじゃないかと。

上記のJaneの例なら
画像を破棄したらその画像で使用した領域はその時点でfree
スレッドを破棄したら、それに使った領域はその時点でfree

word2vecは入力した文書の統計情報は最後まで利用する
--> 破棄されることがないので、freeする必要がない
2014/12/06(土) 19:41:46.07ID:ui+tbMEF
それ「最後まで利用」じゃなくて、利用終了時点の判断をネグってるだけ。
2014/12/06(土) 19:46:54.04ID:ADt2fRJM
プロセスが確保したメモリは、プロセスを終了させても解放されず、
解放するにはコンピュータの再起動が必要となるOSが昔あったなあ。
バグではなく、OSの正規の仕様として。OSの名前忘れたけど。

そんな仕様じゃメモリをいくら積んでも足りないし、連続稼動できないじゃん!

・・・という各方面からの否定的な評価に対し、そのOSの設計者は
「メモリを十分に積まないのが問題」「定期的にリブートすればいいこと」
「メモリ資源の再利用をOSに任せようとするアプリケーション開発者の手抜き」
のようにOS側の問題ではないと一蹴してて、その主張に一理あるということで、
当時はちょっと衝撃を受けたわ。

malloc したものを free することには合理性があるけど。
その価値観に対抗するようなOS設計哲学も存在するということで。
何が正しいのか、唯一の結論を出すのは、なかなか難しいかもねえ(^o^)ノ
2014/12/06(土) 20:01:10.98ID:5oGFUyw+
UnixのSIGKILLみたいに問答無用でプロセスが殺されたりせずに、後始末の作業が
できることがシステム全体として保証されてるなら通る理屈だけど、どうせそのような
仕掛けがあるわけじゃないだろうなw
2014/12/06(土) 22:06:14.90ID:Iv1q4dyj
>>581
だからさぁ・・・それをfree不要とは言わないでしょ。
freeしない領域も実質プログラムの終了でfreeを代用してるだけだし、
プログラマの意図としてはfreeすべき場所を把握できているケース。
このスレはfreeも満足に使えないくせにfree不要とか言っちゃう馬鹿を断罪するスレなんだよ。

なんでそこまでして「free不要論は間違い」をfree必須教みたいに扱って敵視してんの?
発端のfree不要とか言っちゃった馬鹿が知恵つけながら粘ってるようでヤなんだけど。

>>584
そこまで行くとkillするAPIも無いとかkillする側が責任持つべきとかになるんじゃね。
2014/12/06(土) 22:10:57.01ID:jRYa77lH
プログラムの最初から最後まで領域を優先するようなメモリはStatic使うべし。
MallocはFreeされるべき。
2014/12/06(土) 22:51:56.38ID:dmb0kXdE
途中でfreeしてメモリを効率よく使えるようmallocするんじゃないんかと…
2014/12/06(土) 23:09:29.33ID:jRYa77lH
Malloc自体は遅いんだよ。
Freeしなかったら蓄積してって確保できなくなるぞ。
まぁ、最近のコンピュータで困るかはわからん。
2014/12/06(土) 23:29:03.74ID:5oGFUyw+
GCを前提としたmallocだと、極端な奴ではポインタずらして管理情報をちょこっと書くだけ、
って場合もあるけどなw
2014/12/06(土) 23:32:11.16ID:jRYa77lH
なにそのオレオレライブラリ。
2014/12/07(日) 00:10:44.64ID:T0oVgQBw
mallocしたメモリをGCしてくれるわけねーだろw

そういうやつはC++ならせめてgcnewくらい使え
2014/12/07(日) 05:38:55.41ID:LVeISVsO
これが fopen() / fclose()、低水準なら open()/close() の話だったりすると、
プロセス終了時にオープンされているものは OS がクローズしてくれるものにもかかわらず、
「プログラム終了時の fclose() を省略しないやつは糞」というのはあまりきかないね…
ま 10万20万と fopen() するわけではないからね…
2014/12/07(日) 09:22:07.16ID:T0oVgQBw
つーか、終了時のメモリ開放処理程度をめんどくさいとか言うやつは
もうプログラマなんか向いてねーからやめちまえよ
594デフォルトの名無しさん
垢版 |
2014/12/07(日) 09:40:05.22ID:r6DD4JyZ
>>593
プログラマがめんどくさいだけならいいけど、
ユーザーが遅さを体感することになるからな
ユーザビリティの観点からもプロセス終了時の明示的メモリ解放はやめるべきだ
2014/12/07(日) 09:50:23.92ID:SIYxuRDn
>>592
「俺はmallocとfreeを使える」って所で学習が止まってしまっていて、そこまで到達したことだけが
心の支え、というオワコンプログラマが多いのさ。
2014/12/07(日) 10:04:52.37ID:ekuZw6uY
最近のシステムではないと思うけど、ファイルの場合は排他ロックしたらシェルから見てデッドロックしたりするので解放しないという選択肢はないはず。
2014/12/07(日) 10:13:48.44ID:RIZYWRwW
昔はOSの設計上、同時に開けるファイルハンドル数に厳しい制限があった
今はほぼ制限なしに等しくプロセス外にまで支障をきたすほどたくさんファイルを開くシステムも稀
プロセス間で同じファイルを扱うケースも実際には少ない
2014/12/07(日) 10:45:17.82ID:mrRmmrII
たしかに MS-DOS でも1プロセス20までだったか、プロセスメモリマップにもそういうテーブルがあったね
2014/12/07(日) 10:52:54.31ID:mrRmmrII
>>595
たしかに、きっちり malloc() と free() を対応させる技術がなく、当然必要がなくなった時点でさっさと free() することもできない、したがって free() しなくともよい判断は到底不可能という、頭の可哀相な >>558 もいることだし
2014/12/07(日) 11:05:32.98ID:SIYxuRDn
ファイルロックの方法によるのにあっさり決めつけてしまってるあたりが、
全くわかってないことを露呈していて趣き深い。
2014/12/07(日) 13:04:46.31ID:UwBbHZ64
ちょっとしたgcぐらい、自分で作れよ
gcnew?知るかそんなの
602デフォルトの名無しさん
垢版 |
2014/12/08(月) 10:37:40.97ID:SJ/ip5mJ
日本主記憶解放戦線。
2014/12/08(月) 17:49:26.49ID:3czqE9B9
>>602
こまめにmallocしまくって自滅フラグw
604デフォルトの名無しさん
垢版 |
2014/12/08(月) 18:30:17.91ID:SJ/ip5mJ
我々はすべての主記憶を解放するまで戦い続ける。

解放すると遅い。
それは設計あるいは使用範囲が間違っているのである。

適宜開放することにより、誤りに気付く機会が与えられる。
すなわち、確保した記憶域は必ず解放されねばならない。

(主記憶解放戦線憲章より引用)
2014/12/08(月) 19:03:22.56ID:WiG9aNiK
ムダにかっこいい系
2014/12/08(月) 22:23:08.00ID:m6wBRCkx
>>603
こまめに free() することにどんな自滅パターンがあるというのか?お前も頭の可哀相な >>558 の同類か?
2014/12/09(火) 08:32:16.30ID:LA65v/8c
>>593
終了時の開放は別に無くても良いと思う。

勿論反復ルーチンでは都度開放しないといずれ枯渇するから開放は当然。
GC無くても如何なる場合も開放不要、みたいな意見には賛成できない。

要はケースバイケース
608デフォルトの名無しさん
垢版 |
2014/12/09(火) 12:52:12.55ID:i9BKJ0vK
>>607
貴様は己の能力を過信しすぎている。

必ず解放しろ。
いいな、これは命令だ。
2014/12/09(火) 21:46:06.18ID:jdnBb/7K
信者召喚ww
610デフォルトの名無しさん
垢版 |
2014/12/09(火) 23:34:43.57ID:i9BKJ0vK
計算指示書作成手順において、記憶域解放が省略されてはならない。

それは省略ではなく手抜きである。

少々の手抜きが計算指示全体に悪影響を及ぼすことがある。
心して作成せよ。
2014/12/10(水) 00:33:13.98ID:Deu5ogie
サッカースタジアムは、
客がはけた後には必ず掃除されるんだから、
サポーターがゴミ拾いをする必要はない。
2014/12/10(水) 00:37:51.16ID:8C/H0+A2
しかし同じ日に繰り返し何試合もやったら次第に人のいる場所がなくなるだろ
2014/12/10(水) 06:13:48.75ID:115BiRn2
>>ID:i9BKJ0vK
はっはー。サタンサマー。
2014/12/13(土) 00:20:32.42ID:pBf+dW7w
組込ソフトウェアでfreeしなかったら、起動してネットワーク接続したら3分と持たずにフリーズするかメモリ枯渇エラーのログ吐きまくるわ
2014/12/15(月) 15:05:28.38ID:ZETjn4CW
俺の知っている、という枕詞が省略されている典型例やな
2014/12/27(土) 16:11:44.99ID:9Rxt26Ql
free要る派
→自分でしたうんこは自分で流す派

free要らない派
→うんこしたけど、この便所二度と来ることないから俺シラネ
便所の管理人が勝手に掃除してくれるんじゃね?

と考えると、俺は断然free要る派となる
2014/12/29(月) 20:47:20.01ID:KuYXSH39
>>616
流すまでその便所は他の人が使えないわけだが、管理人が来ないまま使える空き便所が無尽蔵にあるという前提が必要だな
2014/12/29(月) 20:53:22.95ID:/sLHpawi
それが無尽蔵にないからswap地獄に陥るんじゃないか。
2014/12/29(月) 21:06:56.82ID:KuYXSH39
管理人がやって来る明確な規則がイマイチわからなくて気持ち悪い
2014/12/29(月) 21:14:34.42ID:bj0t/8Ju
大抵は「管理人仕事しろボタン」があるだろ
2015/02/06(金) 01:41:27.81ID:b3gwE4qm
>>553
>信者信者言うのは
自称だと思うよ
絶対というわけではなく細かい点で要不要が議論されることはあるからね
2015/02/21(土) 23:49:31.87ID:mk77xCMU
fj.comp.lang.c++
Malloc and Free
https://groups.google.com/forum/m/#!msg/fj.comp.lang.c++/G4HRnHTdImg/pTgn9kQaMCoJ
2015/02/22(日) 21:10:43.75ID:XKkbsrmM
>>622
懐かしい、あれから 15年かぁ
2015/02/24(火) 00:46:11.63ID:oRO5M8st
けっこう最近(?)の話なんだ‥面子的に1990年〜1995年くらいかと思っていた
2015/02/24(火) 00:57:46.90ID:zk/7dheO
>>624
Qちゃんfjに参加してたの?
QちゃんC/C++宿題スレで勉強始めたような28才くらいの若者かと思ってたけど(煽り抜き)
意外と古くからML読んでたりしてたの?
おどろき
2015/02/24(火) 01:14:22.05ID:oRO5M8st
>>625
>C/C++宿題スレで勉強始めたような
この部分は当たり他ははずれ
もう7, 8年くらいにはなるな‥
成長が遅いのは頭が悪いせいから仕方がない
2015/02/24(火) 13:58:34.87ID:T1wlJW1m
15年経っても同じような屁理屈をこねる者がいるというのは感慨深い
628デフォルトの名無しさん
垢版 |
2015/07/03(金) 00:44:55.67ID:js6seqbJ
malloc()してfree()しない奴とかなんなの?
exeが終了すればOSがヒープ領域も解放してくれるからfree()不要とかなんなの?
内部で何度もmalloc()するアプリだと、free()しないと、ユーザーが定期的にアプリを
再起動しないとどんどんメモリが食われていく
そんなクソアプリを作る奴はいらね
だからfree()しとけカスども
629NAS6 ◆n3AmnVhjwc
垢版 |
2015/07/04(土) 07:15:01.94ID:+0FMM883
malloc()してfree()しないなら、素直に配列を使えばいいのに・・・
2015/07/04(土) 09:05:53.85ID:5JPjTv/9
>>629
いや、わざわざ釣りは要らんから。
2015/07/04(土) 12:39:12.23ID:eIcp7urH
これはGCやスマートポインタに対する警告文だろね。
2015/07/04(土) 13:31:46.55ID:WvwJxr10
安全側に振って思考停止する奴がCなんか使うんじゃねぇ
という主張なら理解できなくもない
633NAS6 ◆n3AmnVhjwc
垢版 |
2015/07/05(日) 19:06:31.29ID:v9UjDf+H
グローバルスコープの配列で出来ないことは動的確保だけだけど
free()でメモリ節約の意図がないならば
プログラム仕様上の最大容量でグローバルスコープ配列確保で全て済むよ
2015/07/06(月) 08:25:50.04ID:UtQpsrfy
データ量が多くてスワップするほどメモリを使ってしまうのと、僅かなデータの為にスワップするほどメモリを確保するのでは話が違うけどね。
2015/08/25(火) 21:39:50.35ID:bwlYR2I5
何々全部配列でするの?
オブジェクトをnewしてポインタで管理したりしないの?
HSPみたいだね
636NAS6 ◆n3AmnVhjwc
垢版 |
2015/08/25(火) 23:59:50.17ID:WwLbMRpa
void hoge(){
・・・
p=malloc(10);
・・・pにゃむにゃむ、freeはしない
}
void main(){
hoge();
}

なんてのは

type p[10];
void hoge(){
・・・pにゃむにゃむ
}
void main(){
hoge();
}

こっちのほうがいいよ
freeやdeleteをちゃんと使わないコードがダメなだけだよ

スマートポインタを作りたいんなら
template<typename T>class A{
T* m_p;
A(int n){m_p=new T[n];}
~A(){if(m_p){delete[] m_p;m_p=null;}}
・・・にゃむにゃむ
}
コンパイル通してないからあれだけどこんなかんじに
コンストラクタとデストラクタをやっとけよ
2015/08/26(水) 00:36:58.00ID:5P6ATqZc
はいバカ
沢山のオブジェクトを配列で管理とか
638NAS6 ◆n3AmnVhjwc
垢版 |
2015/08/26(水) 01:01:42.59ID:soKtzAZv
#include <iostream>
using namespace std;
#define TEST

template<typename T>class A {
public:
 T* m_p;
 int m_size;
 A() {
  m_p = nullptr;
  m_size = 0;
#ifdef TEST
  cout << "コンストラクタ A"<<endl;
#endif
 }
 A(int n) :A() { m_p = new T[n]; m_size = n; }
 ~A() {
  if (m_p != nullptr) { delete[] m_p; m_p = nullptr; m_size = 0; }
#ifdef TEST
  cout << "デストラクタ A" << endl;
#endif
 }
};
639NAS6 ◆n3AmnVhjwc
垢版 |
2015/08/26(水) 01:02:10.89ID:soKtzAZv
void dispAint(A<int> &a) {
 int i;
 for (i = 0; i < a.m_size; i++) cout << a.m_p[i] << endl;
}
void main() {
 int i;
 { A<int> a(10);
  for (i = 0; i < a.m_size; i++) a.m_p[i] = i + 10;
  dispAint(a); }
 i = 1;//ブレークポイント設定
 return;
}
delete使わないのがダメなだけだよ
スマートポインタを作りたいならこう書く
640NAS6 ◆n3AmnVhjwc
垢版 |
2015/08/26(水) 01:26:51.26ID:soKtzAZv
void A::resize(int n) {
 int i;
 int m = (n < m_size ? n : m_size);
 T* tmp=new T[n];
 for (i = 0; i < m; i++) tmp[i] = m_p[i];
 delete[] m_p;
 m_p = tmp;
 m_size = n;
}
クラスAのリサイズをするんならこんな感じ
2015/08/26(水) 01:28:22.08ID:5P6ATqZc
これのどこがスマートポインタwww
バカ決定じゃねーか
642NAS6 ◆n3AmnVhjwc
垢版 |
2015/08/26(水) 01:33:34.47ID:soKtzAZv
ああ、こうだった
void A::resize(int n) {
 int i;
 int m = (n < m_size ? n : m_size);
 T* tmp=new T[n];
 if (m_p != nullptr) {
  for (i = 0; i < m; i++) tmp[i] = m_p[i];
  delete[] m_p;
 }
 m_p = tmp;
 m_size = n;
}
643NAS6 ◆n3AmnVhjwc
垢版 |
2015/08/26(水) 01:44:03.88ID:soKtzAZv
>>641
どこが?って、そのまんまだよ

 { A<int> a(10);
  for (i = 0; i < a.m_size; i++) a.m_p[i] = i + 10;
  resize(5);
  dispAint(a); }

メモリの確保と破棄をこのスコープで自動的にやるよ
利用は参照渡しじゃないとデストラクタが複数回呼ばれちゃうけどな
644NAS6 ◆n3AmnVhjwc
垢版 |
2015/08/26(水) 01:45:51.99ID:soKtzAZv
ミス
 { A<int> a(10);
  for (i = 0; i < a.m_size; i++) a.m_p[i] = i + 10;
  a.resize(5);
  dispAint(a); }
2015/08/26(水) 01:57:13.25ID:KP8nmGdk
だからそれのどこがスマートポインタなの?
まだ気づかないの?本物のバカだ
646NAS6 ◆n3AmnVhjwc
垢版 |
2015/08/26(水) 02:17:33.32ID:soKtzAZv
所有権エラーが嫌ならthisポインタを保存すればいいだけのこと
ポインタとしての構文動作がしたいなら->()なり、*()なり
オペレータオーバーロードすりゃあいいだろ
#include <iostream>
using namespace std;
#define TEST

template<typename T>class A {
public:
 T* m_p;
 A* m_owner;
 int m_size;
 A() {
  m_owner = this;
  m_p = nullptr;
  m_size = 0;
#ifdef TEST
  cout << "コンストラクタ A"<<endl;
#endif
 }
 A(int n) :A() { m_p = new T[n]; m_size = n; }
 ~A() {
  if (m_owner == this && m_p != nullptr) {
   delete[] m_p; m_p = nullptr; m_size = 0;
#ifdef TEST
   cout << "デストラクタ A" << endl;
#endif
  }
 }
つづき
647NAS6 ◆n3AmnVhjwc
垢版 |
2015/08/26(水) 02:19:36.57ID:soKtzAZv
つづき
 void resize(int n) {
  int i;
  int m = (n < m_size ? n : m_size);
  T* tmp=new T[n];
  if (m_owner == this && m_p != nullptr) {
   for (i = 0; i < m; i++) tmp[i] = m_p[i];
   delete[] m_p;
  }
  m_p = tmp;
  m_size = n;
 }
};

void dispAint(A<int> a) {
 int i;
 for (i = 0; i < a.m_size; i++) cout << a.m_p[i] << endl;
}

void main() {
 int i;
 {
  A<int> a(10);
  for (i = 0; i < a.m_size; i++) a.m_p[i] = i + 10;
  a.resize(5);
  dispAint(a);
 }
 i = 1;//ブレークポイント設定
 return;
}
2015/08/26(水) 02:24:15.81ID:KP8nmGdk
で、これが「スマートポインタ」なわけ?
649NAS6 ◆n3AmnVhjwc
垢版 |
2015/08/26(水) 02:29:19.01ID:soKtzAZv
ポインタとしての構文動作がしたいなら->()なり、*()なり
オペレーターオーバーロードすりゃあいいだろ
650NAS6 ◆n3AmnVhjwc
垢版 |
2015/08/26(水) 06:56:12.48ID:soKtzAZv
ttp://nas6.main.jp/sptr.cpp

スマートポインタで実装したい動作で↑で足りないものはないとおもう
651NAS6 ◆n3AmnVhjwc
垢版 |
2015/08/26(水) 07:00:39.49ID:soKtzAZv
あとはoperator ->(???)の定義の仕方がよくわからん
652NAS6 ◆n3AmnVhjwc
垢版 |
2015/08/26(水) 10:50:48.63ID:soKtzAZv
operator ->()もできた
2015/08/26(水) 10:51:56.19ID:m0f/YXG1
ここまで指摘してあげているのに、
何でスマートポインタで検索して調べないの?
だから君はダメなんだよ
君の書いてるのは、コンテナ、で、スマートポインタ、ではない
はい、答え
バカは黙ってstd::vector使っとけ
2015/08/26(水) 12:36:46.52ID:tnAoTvL3
auto_ptr
scoped_ptr
shared_ptr
weak_ptr
655NAS6 ◆n3AmnVhjwc
垢版 |
2015/08/26(水) 15:07:52.81ID:soKtzAZv
ttp://nas6.main.jp/sptr.cpp

コンストラクタが気に入らないみたいだから、よりポインタに近くしたぞ
2015/08/26(水) 15:40:45.94ID:eIiWuCWx
ひでえなあ…値全部コピーしてるだけで全然ポインタじゃない
しかも所有権管理全然できてないから、
コピーコンストラクタで渡すと移動せず不正アクセス
まだauto_ptrのがマシ
2015/08/26(水) 19:43:14.93ID:8NpsUOma
>>654
俺が一番多用する unique_ptr 忘れてるぞ
658NAS6 ◆n3AmnVhjwc
垢版 |
2015/08/28(金) 16:08:10.30ID:+cnZnxxc
ttp://nas6.main.jp/sptr.cpp
メイン.cpp
ttp://nas6.main.jp/NAS6_smt_ptr.h
クラス.h

テンプレートが分割コンパイルできなくて四苦八苦した
2015/08/28(金) 17:46:52.81ID:k07is2fO
相変わらず、コンテナとスマポの概念がごっちゃになってる
ゴミだな
660デフォルトの名無しさん
垢版 |
2015/08/28(金) 18:09:08.58ID:xcCBDptJ
スマートポインタは標準ライブラリので間に合ってるから、テンプレートベースのツリー
コレクション作ってよ。
661NAS6 ◆n3AmnVhjwc
垢版 |
2015/08/29(土) 15:45:43.98ID:pKiDa5SQ
ttp://nas6.main.jp/sptr.cpp
メイン.cpp
ttp://nas6.main.jp/NAS6_smt_ptr.h
スマートポインタ.h
ttp://nas6.main.jp/NAS6_tree_clct.h
ツリーコレクション.h
■ このスレッドは過去ログ倉庫に格納されています